我试图填充2d numpy数组以使其达到我正在处理的图像的大小,但是np.pad
函数填充了我请求的填充的两倍:
import numpy as np
gaussian = [
[0.003, 0.013, 0.022, 0.013, 0.003],
[0.013, 0.059, 0.097, 0.059, 0.013],
[0.022, 0.097, 0.159, 0.097, 0.022],
[0.013, 0.059, 0.097, 0.059, 0.013],
[0.003, 0.013, 0.022, 0.013, 0.003]
]
gaussian = np.pad(gaussian, ((2, 2), (2, 2)), 'constant')
以上代码在理想情况下应该输出一个(7, 7)
数组(至少这是我所期望的),但是我却将输出作为(9, 9)
二维数组。
答案 0 :(得分:4)
您的代码的行为与documentation所声明的完全一样。特别是,第二个参数为:
pad_width: {序列,类似array_int,int}
填充到每个轴边缘的值的数量。 ((before_1,after_1),…(before_N,after_N))每个轴的唯一焊盘宽度。 ((before,after),)对于每个轴在pad之前和之后产生相同的结果。 (pad)或int是所有轴前=后=垫宽度的快捷方式。
因此,您需要使用((2, 2), (2, 2))
在每个维度的数组的每一侧上另外两个元素。 2 + 5 + 2 = 9,符合预期。
pad_width
的有效选项示例将导致7x7输出数组
1
(1,)
((0, 2),)
((2, 0), (1, 1))
如果您希望填充是对称的,则可能需要前两个。