如何在NumPy中为矩阵添加保护环?

时间:2008-12-12 11:15:15

标签: python numpy

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

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

或等等?

提前致谢

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

3 个答案:

答案 0 :(得分:6)

跟进comment

>>> 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]])

答案 1 :(得分:5)

这是Alex's answer的一般性但更易于理解的版本:

>>> 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]])

答案 2 :(得分:1)

这个问题现在已经很古老了,但我只想提醒人们发现numpy has a function 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]])