python - 使用 Numpy 向量化矩阵中最近邻居的和

标签 python numpy convolution

给定一个 N 乘 N 矩阵 A,我想构造另一个 N 乘 N 矩阵 B,其条目由下式给出:

B_{i,j} = A_{i+1, j} + A_{i-1, j} + A_{i, j+1} + A_{i, j-1}

注意系统使用周期性边界条件所以

A_{N, j} = A_{0, j}

A_{i, -1} = A{i, N-1}

等等。

如何在 numpy 中将其作为矢量化操作来执行?

最佳答案

您描述的操作是 convolution .你可以使用 scipy.ndimage.convolve :

import numpy as np
from scipy.ndimage import convolve, generate_binary_structure

gen = np.random.RandomState(0)
A = gen.random_integers(0, 3, (6, 6))   # input array
k = generate_binary_structure(2, 1)     # kernel
B = convolve(A, k, mode='wrap')         # use mode='wrap' for periodic boundaries

print(A)
# [[0 3 1 0 3 3]
#  [3 3 1 3 1 2]
#  [0 3 2 0 0 0]
#  [2 1 2 3 3 2]
#  [0 1 1 1 1 0]
#  [1 0 3 0 3 1]]

print(k)
# [[False  True False]
#  [ True  True  True]
#  [False  True False]]

print(B)
# [[10  7  8  7 10  9]
#  [ 8 13 10  5  9  9]
#  [ 8  9  8  8  4  4]
#  [ 5  9  9  9  9  7]
#  [ 4  3  8  6  8  4]
#  [ 2  8  5  7  8  8]]

关于python - 使用 Numpy 向量化矩阵中最近邻居的和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35925317/

相关文章:

python - 给定余弦相似度创建随机向量

python - 如何找到用于查找数组中缺失数字的数学表达式

python - 获取 Pandas 数据框中的节点祖先

python - SciPy/NumPy 导入指南

keras - 内核大小等于 1 的 Conv1D 做什么?

python - 在 2 个数组之间移动均方误差 'valid' ,它们完全重叠

python - 我做的python计算器出错了

python - 循环直到特定的用户输入

python - CV2改变图像

matlab - Matlab中的多重卷积