如何在不填充其 k 轴的情况下填充 3D np.array 的 i、j 轴?
How to pad the i, j axes of a 3D np.array without padding its k axis?
我有一个 3-D ndarray。
>>> b = np.arange(27).reshape(3,3,3)
>>> b
array([[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]],
[[18, 19, 20],
[21, 22, 23],
[24, 25, 26]]])
Numpy pad 函数returns 一个 5x5x5 数组:
>>> np.pad(b, (1, 1), constant_values=0)
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]],
[[ 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]],
[[ 0, 0, 0, 0, 0],
[ 0, 9, 10, 11, 0],
[ 0, 12, 13, 14, 0],
[ 0, 15, 16, 17, 0],
[ 0, 0, 0, 0, 0]],
[[ 0, 0, 0, 0, 0],
[ 0, 18, 19, 20, 0],
[ 0, 21, 22, 23, 0],
[ 0, 24, 25, 26, 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, 0],
[ 0, 0, 0, 0, 0]]])
但是,我想要一个像这样的 5x5x3 数组:
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]],
[[ 0, 0, 0, 0, 0],
[ 0, 9, 10, 11, 0],
[ 0, 12, 13, 14, 0],
[ 0, 15, 16, 17, 0],
[ 0, 0, 0, 0, 0]],
[[ 0, 0, 0, 0, 0],
[ 0, 18, 19, 20, 0],
[ 0, 21, 22, 23, 0],
[ 0, 24, 25, 26, 0],
[ 0, 0, 0, 0, 0]]])
如何实现上述目标?
您可以使用 ((0,0),(1,1),(1,1))
代替 (1,1)
来填充:
np.pad(b, ((0,0),(1,1),(1,1)), constant_values=0)
...或者仅 trim 第一项和最后一项:
np.pad(b, (1,1), constant_values=0)[1:-1]
可能不是最优雅的解决方案但是:
>>> np.pad(b, (1,1), constant_values=0)[1:-1]
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]],
[[ 0, 0, 0, 0, 0],
[ 0, 9, 10, 11, 0],
[ 0, 12, 13, 14, 0],
[ 0, 15, 16, 17, 0],
[ 0, 0, 0, 0, 0]],
[[ 0, 0, 0, 0, 0],
[ 0, 18, 19, 20, 0],
[ 0, 21, 22, 23, 0],
[ 0, 24, 25, 26, 0],
[ 0, 0, 0, 0, 0]]])
适合我。
我有一个 3-D ndarray。
>>> b = np.arange(27).reshape(3,3,3)
>>> b
array([[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]],
[[18, 19, 20],
[21, 22, 23],
[24, 25, 26]]])
Numpy pad 函数returns 一个 5x5x5 数组:
>>> np.pad(b, (1, 1), constant_values=0)
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]],
[[ 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]],
[[ 0, 0, 0, 0, 0],
[ 0, 9, 10, 11, 0],
[ 0, 12, 13, 14, 0],
[ 0, 15, 16, 17, 0],
[ 0, 0, 0, 0, 0]],
[[ 0, 0, 0, 0, 0],
[ 0, 18, 19, 20, 0],
[ 0, 21, 22, 23, 0],
[ 0, 24, 25, 26, 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, 0],
[ 0, 0, 0, 0, 0]]])
但是,我想要一个像这样的 5x5x3 数组:
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]],
[[ 0, 0, 0, 0, 0],
[ 0, 9, 10, 11, 0],
[ 0, 12, 13, 14, 0],
[ 0, 15, 16, 17, 0],
[ 0, 0, 0, 0, 0]],
[[ 0, 0, 0, 0, 0],
[ 0, 18, 19, 20, 0],
[ 0, 21, 22, 23, 0],
[ 0, 24, 25, 26, 0],
[ 0, 0, 0, 0, 0]]])
如何实现上述目标?
您可以使用 ((0,0),(1,1),(1,1))
代替 (1,1)
来填充:
np.pad(b, ((0,0),(1,1),(1,1)), constant_values=0)
...或者仅 trim 第一项和最后一项:
np.pad(b, (1,1), constant_values=0)[1:-1]
可能不是最优雅的解决方案但是:
>>> np.pad(b, (1,1), constant_values=0)[1:-1]
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]],
[[ 0, 0, 0, 0, 0],
[ 0, 9, 10, 11, 0],
[ 0, 12, 13, 14, 0],
[ 0, 15, 16, 17, 0],
[ 0, 0, 0, 0, 0]],
[[ 0, 0, 0, 0, 0],
[ 0, 18, 19, 20, 0],
[ 0, 21, 22, 23, 0],
[ 0, 24, 25, 26, 0],
[ 0, 0, 0, 0, 0]]])
适合我。