Numpy - 查找所有元素都是有限的行

时间:2015-03-11 13:32:36

标签: python numpy

我的数据存储在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)

2 个答案:

答案 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]