我想从行中的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)
任何合理的解释?谢谢!
答案 0 :(得分:1)
您有优先权问题
~x.y.z
是
~(x.y.z)
不
(~z).y.z
因此
~np.isnan(A).any(1)
与
不同(~np.isnan(A)).any(1)