Numpy - 直接使用np.isnan并在temp中保存布尔值时的差异。变量

时间:2014-04-09 14:19:21

标签: python numpy nan any

我想从行中的numpy数组中删除NaN,例如:

A = np.array([[1,2,3,4,5,6],
       [1,2,3,4,5,6],
       [1,2,3,4,nan,6],
       [1,2,3,4,5,6],
       [1,2,3,4,5,6],
       [1,2,3,4,5,6],
       [1,2,nan,4,5,6],
       [1,2,3,4,5,6],
       [nan,2,3,4,5,6]])

我使用直接命令删除它们,它工作正常:

A1 = A[~np.isnan(A).any(1)]

但是如果我将布尔值保存在临时数组中:

boolAnonan = ~np.isnan(A)  
A2 = A[boolAnonan.any(1)]

它什么都没改变!

事实上,为什么我这样做? :

>>> boolAnonan == ~np.isnan(A)
array([[ True,  True,  True,  True,  True,  True],
   [ True,  True,  True,  True,  True,  True],
   [ True,  True,  True,  True,  True,  True],
   [ True,  True,  True,  True,  True,  True],
   [ True,  True,  True,  True,  True,  True],
   [ True,  True,  True,  True,  True,  True],
   [ True,  True,  True,  True,  True,  True],
   [ True,  True,  True,  True,  True,  True],
   [ True,  True,  True,  True,  True,  True]], dtype=bool)

>>> ~np.isnan(A).any(1)
array([ True,  True, False,  True,  True,  True, False,  True, False], dtype=bool)

>>> boolAnonan.any(1)
array([ True,  True,  True,  True,  True,  True,  True,  True,  True], dtype=bool)

任何合理的解释?谢谢!

1 个答案:

答案 0 :(得分:1)

您有优先权问题

~x.y.z

~(x.y.z)

(~z).y.z

因此

~np.isnan(A).any(1)

不同
(~np.isnan(A)).any(1)