比较python

时间:2016-09-10 06:37:38

标签: 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 'all result :' + str(result)

如何能够产生零件,例如第一个数据20然后20个第二个数据和20个第三个数据在数组中? 结果应该是:

所有结果:20

20个数据的结果:0

20秒数据的结果:20

结果为20个第三个数据:0

2 个答案:

答案 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()