如何沿某个轴用零填充张量(Python)

如何沿某个轴用零填充张量(Python),python,numpy,multidimensional-array,Python,Numpy,Multidimensional Array,我想沿着选择的轴用0填充一个numpy张量。 例如,我有张量r,形状(4,3,2),但我只对填充最后两个轴感兴趣(即,仅填充矩阵)。是否可以使用一行python代码执行此操作?您可以使用: 此功能将在特定轴的末端进行填充。 如果你想把两边都垫上,只需修改它 def pad_along_axis(array: np.ndarray, target_length: int, axis: int = 0): pad_size = target_length - array.shape[axi

我想沿着选择的轴用0填充一个numpy张量。 例如,我有张量
r
,形状
(4,3,2)
,但我只对填充最后两个轴感兴趣(即,仅填充矩阵)。是否可以使用一行python代码执行此操作?

您可以使用:


此功能将在特定轴的末端进行填充。
如果你想把两边都垫上,只需修改它

def pad_along_axis(array: np.ndarray, target_length: int, axis: int = 0):

    pad_size = target_length - array.shape[axis]

    if pad_size <= 0:
        return array

    npad = [(0, 0)] * array.ndim
    npad[axis] = (0, pad_size)

    return np.pad(array, pad_width=npad, mode='constant', constant_values=0)

注意(n_before,n_after)是指行/列的数量;所以上面的(1,2),对于第二维度意味着,前面一行(上面),后面两行(下面)。同样,(2,1)表示之前的2行(向右移动2列0,向左移动,用1列0填充)。@berto77谢谢你的评论,我一直在努力
len(array.shape)==array.ndim
。此外,如果
pad\u size,你可以安全地
返回

def pad_along_axis(array: np.ndarray, target_length: int, axis: int = 0):

    pad_size = target_length - array.shape[axis]

    if pad_size <= 0:
        return array

    npad = [(0, 0)] * array.ndim
    npad[axis] = (0, pad_size)

    return np.pad(array, pad_width=npad, mode='constant', constant_values=0)
>>> a = np.identity(5)
>>> b = pad_along_axis(a, 7, axis=1)
>>> print(a, a.shape)
[[1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]] (5, 5)

>>> print(b, b.shape)
[[1. 0. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0. 0.]
 [0. 0. 1. 0. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0.]] (5, 7)