通过节比较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)
。