如何在numpy sum中使用条件表达式

时间:2017-10-13 23:48:14

标签: python numpy

我有一个二维数组,其中行代表患者,列代表属性(旧的,锻炼,疾病)。

我的目的是计算锻炼和患病的患者人数。我知道有可能     np.sum(patientData [1])

但我怎么能这样做呢     np.sum(patientData [1]和patientData [2])

数据示例

A = [ [34, 1, 1],
      [22, 0, 0],
      [90, 1, 1]
    ]

因此,例如,首次进入意味着患者年龄为34岁,有锻炼,患有疾病

本例中有运动和患病的患者人数为2.

现在我正在做这个

excerciseAndDisease = 0
for row in A:
   if row[1] and row[2]:
      excercsieAndDisease += 1

3 个答案:

答案 0 :(得分:2)

使用矢量化&代替,如果您有一个numpy数组,请使用[:,1][:,2]索引列:

np.sum(patientData[:,1] & patientData[:,2])
A = [[34, 1, 1],
     [22, 0, 0],
     [90, 1, 1]]
​
a = np.asarray(A)
np.sum(a[:,1] & a[:,2])
# 2

或使用np.count_nonzero

%timeit np.sum(a[:,1] & a[:,2])
# 4.25 µs ± 10.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit np.count_nonzero(a[:,1] & a[:,2])
# 2.01 µs ± 23.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

答案 1 :(得分:0)

以下是您可以尝试使用的内容:

In [0]: a = np.array([-1,0,1,2,3,4,5])

In [1]: a[a<0]

Out[2]: array([-1])

答案 2 :(得分:0)

您可以使用numpy函数,假设第二和第三列为二进制:

numpy.sum(numpy.multiply(A[:,1], aa[:,2]))