使用 numpy, ,一个矩阵A具有n行和M列,我想在矩阵A中添加一个防护戒指。该防护戒指全部为零。

我应该怎么办?使用重塑?但是该元素不足以制作n+1 m+1矩阵。

还是等?

提前致谢

我的意思是,一个额外包含0周围矩阵的额外的单元环A.基本上有一个矩阵B具有n+2rows m+2columns,其中第一行和列,最后一行和列都是零,其余的是与矩阵A相同。
有帮助吗?

解决方案

跟进你 评论:

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

其他提示

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

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

这个问题现在很古老,但我只想提醒人们发现 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]])
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top