2

使用NumPy,矩阵 A 有 n 行和 m 列,我想为矩阵 A 添加一个保护环。该保护环全为零。

我该怎么办?使用重塑?但该元素不足以构成一个 n+1 m+1 矩阵。

还是等等?

提前致谢

我的意思是一圈额外的单元格总是包含 0 环绕矩阵 A。基本上有一个矩阵 B 有 n+2 行 m+2 列,其中第一行和列以及最后一行和列都为零,其余为与矩阵 A 相同。
4

3 回答 3

5

跟进您的评论

>>> import numpy
>>> a = numpy.array(range(9)).reshape((3,3))
>>> b = numpy.zeros(tuple(s+2 for s in a.shape), a.dtype)
>>> b[tuple(slice(1,-1) for s in a.shape)] = a
>>> b
array([[0, 0, 0, 0, 0],
       [0, 0, 1, 2, 0],
       [0, 3, 4, 5, 0],
       [0, 6, 7, 8, 0],
       [0, 0, 0, 0, 0]])
于 2008-12-12T15:12:04.923 回答
5

这是亚历克斯答案的一个不太通用但更容易理解的版本:

>>> a = numpy.array(range(9)).reshape((3,3))
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> b = numpy.zeros(a.shape + numpy.array(2), a.dtype)
>>> b
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])
>>> b[1:-1,1:-1] = a
>>> b
array([[0, 0, 0, 0, 0],
       [0, 0, 1, 2, 0],
       [0, 3, 4, 5, 0],
       [0, 6, 7, 8, 0],
       [0, 0, 0, 0, 0]])
于 2008-12-14T00:10:02.820 回答
2

这个问题现在很古老,但我只是想提醒人们发现numpy 有一个pad现在很容易完成的功能。

import numpy as np
a = np.array(range(9)).reshape((3, 3))
a
Out[15]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

a = np.pad(a, pad_width=((1,1),(1,1)), mode='constant', constant_values=0)
a
Out[16]: 
array([[0, 0, 0, 0, 0],
       [0, 0, 1, 2, 0],
       [0, 3, 4, 5, 0],
       [0, 6, 7, 8, 0],
       [0, 0, 0, 0, 0]])
于 2017-05-11T03:56:46.910 回答