如何非对称地填充数组(例如,仅从一侧)?
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 行零(仅):
>>> np.pad(a, ((1, 0), (0, 0)), pad_with, padder=0)
[[0 0 0]
[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]]
等等。
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 行零(仅):
>>> np.pad(a, ((1, 0), (0, 0)), pad_with, padder=0)
[[0 0 0]
[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]]
等等。