我有一个二维数组,其中行代表患者,列代表属性(旧的,锻炼,疾病)。
我的目的是计算锻炼和患病的患者人数。我知道有可能 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
答案 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]))