我要垫:
[[1, 2]
[3, 4]]
到
[[0, 0, 0]
[0, 1, 2]
[0, 3, 4]]
当 vstack 和 hsrack 的输入是 2D 时,我这样做没问题
但是,当我加1个dim来表示数字的dim时,比如:
img = np.random.randint(-10, 10, size=(2, 2, 2))
如果我不想使用 for 循环,我就不能这样做。 有什么方法可以避免 for 但只有 numpy 的堆栈才能做到吗?
ps:对于这个例子,我应该得到 (2,3,3) 数组,每个 2 img 实例在第 1 列和第 1 行用零填充。
谢谢
最佳答案
您可以使用 np.pad
,它允许您指定填充到每个轴边缘的值的数量。
因此对于第一个示例 2D
数组,您可以这样做:
a = np.array([[1, 2],[3, 4]])
np.pad(a,((1, 0), (1, 0)), mode = 'constant')
array([[0, 0, 0],
[0, 1, 2],
[0, 3, 4]])
因此,这里每个元组代表沿每个轴用零填充的边,即 ((before_1, after_1), … (before_N, after_N))
。
对于 3D
数组同样适用,但在这种情况下我们必须指定我们只想零
填充最后两个维度:
img = np.random.randint(-10, 10, size=(2, 2, 2))
np.pad(img, ((0,0), (1,0), (1,0)), 'constant')
array([[[ 0, 0, 0],
[ 0, -3, -2],
[ 0, 9, -5]],
[[ 0, 0, 0],
[ 0, 1, -9],
[ 0, -1, -3]]])
关于python - 沿轴的零垫阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56076094/