我有一个矩阵
例如.
[[4,5,0,0,0],
[5,1,2,1,0],
[0,2,3,2,0],
[0,1,2,1,0],
[0,0,0,0,0]]
对于矩阵中的每个元素,我试图获取其相邻对角元素的总和及其相邻水平和垂直元素的总和.
以矩阵中间的3为例,我试图计算对角相邻元素(1)与水平和垂直相邻元素(2)的总和.
对于拐角和边缘情况,我想忽略没有元素的区域,例如(对于左上角的4,我想获得对角线相邻的1的总和以及水平和垂直相邻的总和5的.
在python中最有效的方法是什么?
到目前为止,我已经提出了
diagonals = lambda x,y:[(x-1, y-1), (x-1,y+1), (x+1,y-1), (x+1,y+1)]
horiz_vert= lambda x,y:[(x,y+1), (x,y-1), (x+1,y), (x-1,y)]
以获得索引,但是这些没有考虑边缘和拐角情况.
解决方法:
解决此任务的正确工具似乎是convolution.您只需定义将在每个位置应用的过滤器(“对角线邻居的总和”或“垂直/水平邻居的总和”)就可以了.
import numpy as np
import scipy.signal
D = np.array([[4,5,0,0,0],
[5,1,2,1,0],
[0,2,3,2,0],
[0,1,2,1,0],
[0,0,0,0,0]])
h_diag = np.array([[1,0,1], [0,0,0], [1,0,1]])
h_hv = np.array([[0,1,0], [1,0,1], [