1

Numpy 的文档中有一个使用常量填充二维数组的示例:

def pad_with(vector, pad_width, iaxis, kwargs):
    pad_value = kwargs.get('padder', 10)
    vector[:pad_width[0]] = pad_value
    vector[-pad_width[1]:] = pad_value

但它仅适用于对称填充。例如,np.pad(a, ((2, 2), (1, 1)), pad_with, padder=0)给出:

[[0 0 0 0 0]
 [0 0 0 0 0]
 [0 1 1 1 0]
 [0 1 1 1 0]
 [0 0 0 0 0]
 [0 0 0 0 0]]

问题:如何仅从特定侧面(即仅左侧和顶部)填充阵列?像这样:

[[0 0 0 0]
 [0 0 0 0]
 [0 1 1 1]
 [0 1 1 1]]
4

1 回答 1

1

通过一个简单的改变,我们可以实现这一点:

def pad_with(vector, pad_width, iaxis, kwargs):
    pad_value = kwargs.get('padder', 0)
    vector[:pad_width[0]] = pad_value
    if pad_width[1] != 0:                      # <-- the only change (0 indicates no padding)
        vector[-pad_width[1]:] = pad_value

这里有些例子:

  1. 将 1 行零(仅)填充到顶部:
>>> np.pad(a, ((1, 0), (0, 0)), pad_with, padder=0)
[[0 0 0]
[1 1 1]
[1 1 1]]
  1. 在左侧和右侧填充 2 行零:
np.pad(a, ((0, 0), (2, 2)), pad_with, padder=0)
[[0 0 1 1 1 0 0]
 [0 0 1 1 1 0 0]]

等等。

于 2019-11-28T17:01:16.550 回答