numpy.pad添加的填充比声明的两倍

时间:2019-02-10 23:43:38

标签: python python-3.x numpy

我试图填充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)二维数组。

1 个答案:

答案 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))

如果您希望填充是对称的,则可能需要前两个。