numpy 在没有循环的数组中添加中间元素

zwghvu4y  于 2023-11-18  发布在  其他
关注(0)|答案(2)|浏览(134)

我有一个这样的矩阵:

B = array([[1, 1, 2, 3, 3],
           [4, 4, 5, 6, 6],
           [7, 7, 8, 9, 9]])

字符串
我希望能够得到这样的结果:

result = np.array([[1, 4, 6, 8, 3],
                   [4, 13, 15, 17, 6],
                   [7, 22, 24, 26, 9]])


我保留了每行的第一个元素和最后一个元素,但添加了前3个元素以获得中间的内容。
我有一个代码,使用一个循环,这是下面使用循环。

for i in range(0,3):
    for j in range(1,4):
        C[i,j] = np.sum(B[i,j-1:j+2])
    C[i][0] = B[i][0]
    C[i][-1] = B[i][-1]


但是我想要一个没有循环的优化方法。非常感谢

hc2pp10m

hc2pp10m1#

使用scipy.signal.convolve2d和1x3内核计算2D卷积:

from scipy.signal import convolve2d

B[:, 1:-1] = convolve2d(B, np.ones((1, 3), dtype=B.dtype), mode='valid')

字符串
输出量:

array([[ 1,  4,  6,  8,  3],
       [ 4, 13, 15, 17,  6],
       [ 7, 22, 24, 26,  9]])

vbopmzt1

vbopmzt12#

你不需要循环。

C[:,[0,4]] = B[:,[0,4]]
C[:,1] = B[:,0]+B[:,1]+B[:,2]
C[:,2] = B[:,1]+B[:,2]+B[:,3]
C[:,3] = B[:,2]+B[:,3]+B[:,4]

字符串

相关问题