比较布尔数组:计算两个数组都是Tru的次数

2024-05-20 01:06:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道如何计算多个NumPy bool数组中的真元素数。例如,在哪个试验上,A和B==1。下面是我尝试过的。你知道吗

A = array([1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 2, 1, 1, 2, 2, 2, 1, 2, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 2, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 1, 2, 1, 1, 2, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 2, 1, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 2, 2, 2, 1])
B = np.array([ 1.,  1.,  1.,  1.,  1.,  1.,  0.,  1.,  0.,  1.,  1.,  1.,  1., 0.,  1.,  0.,  0.,  1.,  1.,  1.,  0.,  0.,  1.,  0.,  1.,  1., 1.,  1.,  1.,  1.,  0.,  1.,  1.,  0.,  1.,  1.,  1.,  0.,  0., 0.,  1.,  1.,  0.,  0.,  1.,  0.,  1.,  1.,  1.,  1.,  1.,  1., 1.,  1.,  1.,  0.,  1.,  0.,  1.,  0.,  1.,  1.,  1.,  1.,  0., 0.,  1.,  0.,  0.,  1.,  1.,  1.,  0.,  0.,  1.,  0.,  1.,  1., 0.,  1.,  1.,  1.,  0.,  1.,  1.,  1.,  0.,  0.,  0.,  0.,  0., 1.,  0.,  1.,  0.,  1.,  1.,  1.,  0.,  0.,  1.,  1.,  1.,  0., 0.,  1.,  1.,  0.,  1.,  1.,  1.,  0.,  1.,  0.,  1.,  1.,  0., 1.,  0.,  0.,  0.,  0.,  1.,  1.,  1.,  0.,  0.,  0.,  1.,  0., 1.,  1.,  1.,  1.,  1.,  0.,  0.,  1.,  0.,  1.,  0.,  1.,  1., 1.,  1.,  1.,  1.,  1.,  1.,  0.,  0.,  1.,  1.,  1.,  1.,  0., 1.,  1.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  1.,  1.,  0.,  0., 0.,  0.,  1.,  1.,  1.,  0.,  1.,  1.,  0.,  1.,  1.,  1.,  1., 0.,  0.,  1.,  0.,  1.,  1.,  1.,  0.])

num_trials = len(A)
slide_avg = np.zeros(num_trials)

for i in range(num_trials):
    if i < num_trials_slide:
        slide_avg[i] = np.sum(A[0:i+1] == 1 and B[0:i+1] == 1)/float(np.sum(A[0:i+1] == 1))

我得到以下错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Tags: innumpy元素forlennpzeros数组
2条回答

如果简单地按元素将数组相乘成一个新数组(例如C),则等于1的元素数将等于a和B都为真的元素数。你知道吗

len(np.where(A*B == 1)[0])

@AustinA有一个非常聪明的answer利用了1*1=1的事实。你知道吗

一个可能的不足是对于非整数值的情况,即2.0和0.5,在这种逻辑下,它们的值将为1.0。如果是这样,另一种选择是:

np.sum((A == 1) & (B == 1))
# 24

但如果你用的是所有整数,@Austin的答案应该快2倍。你知道吗

相关问题 更多 >