Python 比较布尔数组:计算两者均为真的次数

Python 比较布尔数组:计算两者均为真的次数,python,numpy,boolean,ambiguous,valueerror,Python,Numpy,Boolean,Ambiguous,Valueerror,我想知道如何计算多个NumPy布尔数组中的真元素数。例如,在哪些试验中,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,

我想知道如何计算多个NumPy布尔数组中的真元素数。例如,在哪些试验中,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))

如果只是将数组按元素相乘成一个新数组(例如C),则等于1的元素数将等于a和B均为真的元素数

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

如果只是将数组按元素相乘成一个新数组(例如C),则等于1的元素数将等于a和B均为真的元素数

len(np.where(A*B == 1)[0])
@AustinA非常聪明地利用了1*1=1这一事实

一个可能的不足是,如果您有非整数值,即2.0和0.5,在这种逻辑下,其计算结果将为1.0。如果是这种情况,另一种选择是:

np.sum((A == 1) & (B == 1))
# 24
但是如果你用的是所有整数,@Austin的答案应该快2倍左右。

@AustinA非常聪明地利用了1*1=1这一事实

一个可能的不足是,如果您有非整数值,即2.0和0.5,在这种逻辑下,其计算结果将为1.0。如果是这种情况,另一种选择是:

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

但是如果你在处理所有整数,@Austin的答案应该快2倍。

替换
认为应该是:
np.sum((A[0:i+1]==1)和(B[0:i+1]==1))/float(np.sum(A[0:i+1]==1))
。然后我得到以下错误:输入类型不支持ufunc'bitwise',根据强制转换规则“safe”将
替换为
&
认为应该是:
np.sum((A[0:i+1]==1)和(B[0:i+1]==1))/float(np.sum(A[0:i+1]==1))
。然后我得到以下错误:TypeError:ufunc'bitwise_and'不支持输入类型,并且无法根据强制转换规则“safe”将输入安全强制为任何支持的类型