如何非对称地填充数组(例如,仅从一侧)?

How to pad an array non-symmetrically (e.g., only from one side)?

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]]

通过简单的更改,我们可以实现这一目标:

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]]

等等。