在np.array的2列中查找非零值的数量

时间:2016-12-13 13:42:28

标签: python arrays numpy

我有一个带有数字的 np.array 。我需要计算两列中非零的值的数量。

示例:

col1 = (1, 0, 2, 0, 8)
col2 = (0, 1, 6, 0, 9)

结果:

2只有(2,6)和(8,9)行是可以的。

我的版本(但这太慢了):

both_num = 0 
for k in range(matrix[:, i].shape[0]):
  if matrix[:, i][k] != 0 and matrix[:, j][k] != 0:
    both_num += 1

2 个答案:

答案 0 :(得分:0)

您可以使用all

import numpy as np
a = np.array([[1, 0, 2, 0, 8], [0, 1, 6, 0, 9]])
# array([[1, 0, 2, 0, 8],
#        [0, 1, 6, 0, 9]])
a.all(axis=0)
# array([False, False,  True, False,  True], dtype=bool)

然后您只需要总结它:

np.sum(a.all(axis=0))
# 2

同样,如果您的数组是转置的,

a = np.array([[1, 0, 2, 0, 8], [0, 1, 6, 0, 9]]).T
# array([[1, 0],
#        [0, 1],
#        [2, 6],
#        [0, 0],
#        [8, 9]])
np.sum(a.all(axis=1))
# 2

答案 1 :(得分:0)

col1 = (1, 0, 2, 0, 8)
col2 = (0, 1, 6, 0, 9)
c =  map(lambda col_1, col_2: col_1 and col_2, col1, col2)

import numpy as np
print np.count_nonzero([c])

# thx to @AChampion
np.count_nonzero(col1*col2)