整个阵列的和模式

时间:2018-09-09 17:28:18

标签: python python-3.x numpy

我很难找到适当的方法来执行我认为使用numpy的琐碎工作。我有一个数组(1000x1000),我想计算整个数组中特定模式的总和。

例如:

如果我有这个数组,并且想要计算一个两个像元右对角线的总和,我期望[7,12,11,8,12,6,11,7](总共8个总和)。

enter image description here

我该怎么做?

2 个答案:

答案 0 :(得分:12)

此操作称为二维convolution

>>> import numpy as np
>>> from scipy.signal import convolve2d
>>> kernel = np.eye(2, dtype=int)
>>> a = np.array([[5,3,7,1,2],[3,2,9,4,7],[8,9,4,2,3]])
>>> convolve2d(a, kernel, mode='valid')
array([[ 7, 12, 11,  8],
       [12,  6, 11,  7]])

如果您想将其推广到任意尺寸,也可以使用scipy.ndimage.convolve。它也适用于这种2d情况,但是不提供mode='valid'的便利。

答案 1 :(得分:2)

l = [[5,3,7,1,2],[3,2,9,4,7],[8,9,4,2,3]]
[q+l[w+1][t+1] for w,i in enumerate(l[:-1]) for t,q in enumerate(i[:-1])]

然后您可以避免使用numpy :)并且输出为

[7,12,11,8,12,6,11,7]