我想按部分比较两个数组。 到目前为止,我必须得到所有阵列的结果。
import numpy as np
array1 = np.array(list(np.zeros(20))+(list(np.ones(20)))+(list(2*np.ones(20))))
array2 = np.array(list(np.ones(20))+(list(np.ones(20)))+(list(3*np.ones(20))))
result = np.sum(array1 == array2)
print 'all result :' + str(result)
如何能够产生零件,例如第一个数据20然后20个第二个数据和20个第三个数据在数组中? 结果应该是:
所有结果:20
20个数据的结果:0
20秒数据的结果:20
结果为20个第三个数据:0
答案 0 :(得分:3)
首先,让我们得到比较的面具 -
mask = array1 == array2
然后,得到所有的总和 -
allsum = mask.sum()
并获得分段(长度为20
)和 -
section_sums = mask.reshape(-1,20).sum(1)
示例运行 -
In [77]: mask = array1 == array2
In [78]: mask.sum()
Out[78]: 20
In [79]: mask.reshape(-1,20).sum(1)
Out[79]: array([ 0, 20, 0])
对于通用长度
如果输入数组的长度不能保证是20
的倍数,我们可以使用np.bincount
的方法来获取section_sums
,就像这样 -
section_sums = np.bincount(np.arange(mask.size)//20,mask)
示例运行 -
In [5]: a1=np.array(list(np.zeros(20))+(list(np.ones(20)))+(list(2*np.ones(17))))
...: a2=np.array(list(np.ones(20))+(list(np.ones(20)))+(list(3*np.ones(17))))
...:
In [6]: mask = a1==a2
In [7]: np.bincount(np.arange(mask.size)//20,mask)
Out[7]: array([ 0., 20., 0.])
答案 1 :(得分:1)
分别将每个20加起来:
matches = array1 == array2
print 'first 20: {}'.format(matches[:20].sum())
print 'second 20: {}'.format(matches[20:40].sum())
print 'third 20: {}'.format(matches[40:60].sum())
np.sum(x)
通常相当于x.sum()