数组之间的总和模式

Joh*_*ohn 8 python numpy python-3.x

我很难找到正确的方法来做一些我认为应该使用numpy的微不足道的事情.我有一个数组(1000x1000),我想计算整个数组中特定模式的总和.

例如:

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

在此输入图像描述

我怎样才能做到这一点?

wim*_*wim 12

此操作称为二维卷积:

>>> 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]])
Run Code Online (Sandbox Code Playgroud)

如果您想将其概括为任意尺寸,也scipy.ndimage.convolve可以使用.它也适用于这个2d的情况,但不提供mode='valid'方便.