我的数据存储在n行和p列的numpy数组中。
我想检查哪些行是完全有限的,并将此信息存储在布尔数组中,以便将其用作某处的掩码。
我已经解决了p = 2的情况,但是想要解决所有情况
我的代码如下所示:
raw_test = np.array([[0, numpy.NaN], [0, 0], [numpy.NaN, numpy.NaN]])
test = np.isfinite(raw_test)
def multiply(x):
return x[0] * x[1]
numpy.apply_along_axis(multiply, 1, test)
答案 0 :(得分:5)
您可以使用numpy.isnan
检查哪些项目为NaN
,然后使用True
查找所有numpy.all
项的行索引和numpy.where
。
>>> np.isnan(raw_test)
array([[False, True],
[False, False],
[ True, True]], dtype=bool)
>>> np.all(np.isnan(raw_test), axis=1)
array([False, False, True], dtype=bool)
>>> np.where(np.all(np.isnan(raw_test), axis=1))[0]
array([2])
答案 1 :(得分:3)
另一种选择是使用masked_array:
import numpy as np
raw_test = np.array([[0, np.NaN], [0, 0], [np.NaN, np.NaN]])
test = np.ma.masked_invalid(raw_test)
print(test)
# [[0.0 --]
# [0.0 0.0]
# [-- --]]
def multiply(x):
return x[0] * x[1]
print(np.apply_along_axis(multiply, 1, test))
产量
[ nan 0. nan]