计算四个数组中的非零非NaN

时间:2019-07-01 02:11:55

标签: arrays numpy count nan

我有四个数组,所有数组都包含零和NaN,并且我试图获取所有非零且非NaN的元素总数数组。 MWE:

import numpy as np

np.random.seed(100)
array = np.random.rand(10,5)

array[0][0] = np.nan
array[1][0] = np.nan
array[0][3] = np.nan
array[5][2] = 0
array[5][4] = np.nan

如果我键入

np.count_nonzero(np.logical_and(~np.isnan(array[1]), ~np.isnan(array[2]), ~np.isnan(array[3])))

我得到了4的预期输出。但是再添加一个条件,如

np.count_nonzero(np.logical_and(~np.isnan(array[1]), ~np.isnan(array[2]), ~np.isnan(array[3]), ~np.isnan(array[9])))

给我

Traceback (most recent call last):

  File "<ipython-input-36-02311cb3ca54>", line 1, in <module>
    np.count_nonzero(np.logical_and(~np.isnan(array[1]), ~np.isnan(array[2]), ~np.isnan(array[3]), ~np.isnan(array[9])))

ValueError: invalid number of arguments

为什么我还要再添加一个条件来得到错误消息?

2 个答案:

答案 0 :(得分:0)

enter image description here仅采用两个数组,并返回两个数组的明智元素 。位置参数的最大数量为3,这就是为什么您收到错误并且没有按照您的意愿去做;这是为什么?更好的选择是按以下方式重写逻辑,这样您就可以轻松地在行索引列表中添加更多行:

(~np.isnan(array[[1,2,3,9]])).all(axis=0).sum()
# 4

或:

np.count_nonzero((~np.isnan(array[[1,2,3,9]])).all(axis=0))
# 4

答案 1 :(得分:0)

我认为答案是您使用的count_nonzero错误。

从文档中仅需要2个参数:numpy.count_nonzero(a, axis=None)[source] [numpy count_zero docs] [1]

而且您也无法拨打电话

那为什么不这样呢?

import numpy as np

np.random.seed(100)
array = np.random.rand(10,5)

array[0][0] = np.nan
array[1][0] = np.nan
array[0][3] = np.nan
array[5][2] = 0
array[5][4] = np.nan

print(np.count_nonzero((array)) - np.sum(np.isnan(array)))

因此,您计算所有包含nan的non_zeros。所以减去那些。

对每个数组都这样做,然后添加它们。

例如

mySum = np.count_nonzero((array[1])) - np.sum(np.isnan(array[1]))
mySum += np.count_nonzero((array[2])) - np.sum(np.isnan(array[2])) 
mySum += np.count_nonzero((array[3])) - np.sum(np.isnan(array[3])) 
mySum += np.count_nonzero((array[9])) - np.sum(np.isnan(array[9]))

print(mySum)