首页 > 解决方案 > numpy.pad 添加的填充是声明的两倍

问题描述

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

标签: pythonpython-3.xnumpy

解决方案


您的代码的行为与文档所述完全一样。特别是,第二个参数读取:

pad_width : {sequence, array_like, int}

填充到每个轴边缘的值的数量。((before_1, after_1), ... (before_N, after_N)) 每个轴的唯一焊盘宽度。((before, after),) 在每个轴的 pad 之前和之后产生相同的结果。(pad,) 或 int 是 before = after = 所有轴的焊盘宽度的快捷方式。

因此,您要求在数组的每一侧在每个维度上添加两个额外的元素((2, 2), (2, 2))。正如预期的那样,2 + 5 + 2 = 9。

有效选项的示例pad_width将导致 7x7 输出数组是

  • 1
  • (1,)
  • ((0, 2),)
  • ((2, 0), (1, 1))

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


推荐阅读