通过节比较python中的两个numpy数组

通过节比较python中的两个numpy数组,python,arrays,python-2.7,numpy,Python,Arrays,Python 2.7,Numpy,我想分段比较这两个数组。 到目前为止,我必须得到所有数组的结果 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

我想分段比较这两个数组。 到目前为止,我必须得到所有数组的结果

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

只需分别对每个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()

首先,让我们来看看比较的掩码-

mask = array1 == array2
然后,得到所有的总和-

allsum = mask.sum()
并获得分段(长度
20
)和-

样本运行-

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])
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.])

用于一般长度

如果不能保证输入数组的长度是
20
的倍数,我们可以使用
np.bincount
的方法来获得
section\u和
,如下所示-

section_sums = np.bincount(np.arange(mask.size)//20,mask)
样本运行-

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])
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.])

np.array(list(np.zero(20))+(list(np.one(20)))+(list(2*np.one(20))
的拼写更好
np.concatenate([np.zero(20),np.one(20),2*np.one(20)]
@OP:注意,如果数组的长度不是20个样式点的倍数,则此操作将失败:文档似乎倾向于将
轴作为kwarg:
.sum(axis=1)传递
@RiskaNanda,意思是沿二维重塑阵列的第二个轴求和。当我们跳过说明
参数时,该轴的简写符号变为
.sum(1)