我有一个数组,在numpy中有两列。例如:
a = array([[1, 5, nan, 6],
[10, 6, 6, nan]])
a = transpose(a)
我想高效地遍历这两列,a[:,0]和a[:,1]并删除满足特定条件的任何对,在本例中,如果它们是NaN。我能想到的显然是:
new_a = []
for val1, val2 in a:
if val2 == nan or val2 == nan:
new_a.append([val1, val2])
但那看起来很笨拙。这是什么样的Python核做的方式?
谢谢。
Tags:
这并不是贬低ig0774的答案,它是完全有效的和Python的,事实上是用普通Python做这些事情的正常方式,但是:numpy支持布尔索引系统,它也可以做这项工作。
我不确定哪种方式更有效(或执行更快)。
如果要使用不同的条件来选择行,则必须对其进行更改,具体取决于条件。如果可以独立地对每个数组元素求值,则可以用适当的测试替换
a==a
,例如消除所有可以执行的大于100的行但是如果你想做一些花哨的事情,涉及到一行中的所有元素(比如删除所有总和超过100的行),那可能会更复杂。如果是这样的话,我可以试着在一个更具体的答案编辑,如果你想分享你的确切条件。
可以将数组转换为masked array,并使用^{} method :
如果只接受没有nan的行,则需要使用以下表达式:
如果希望元素中没有特定数字的行,例如5:
后者显然相当于
说明: 我们首先创建示例输入
这决定了哪些元素是NAN
它标识哪些行具有任何为True的元素
因为我们不想要这些,所以我们否定了最后一个表达式:
最后,我们使用布尔数组来选择所需的行:
相关问题 更多 >
编程相关推荐