Python 比较布尔数组:计算两者均为真的次数
我想知道如何计算多个NumPy布尔数组中的真元素数。例如,在哪些试验中,A和B都=1。下面是我试过的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,
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”将输入安全强制为任何支持的类型