如何有效地将numpy数组的大小调整为给定的形状,必要时用零填充?

我想基于另一个numpy数组创建给定形状的数组。尺寸数量将是匹配的,但尺寸会因轴而异。如果原始尺寸太小,我想用零填充以符合要求。需要说明的预期行为示例:

embedding = np.array([
    [1, 2, 3, 4],
    [5, 6, 7, 8]
])

resize_with_outer_zeros(embedding, (4, 3)) = np.array([
    [1, 2, 3],
    [5, 6, 7],
    [0, 0, 0],
    [0, 0, 0]
])

我想我通过以下功能实现了所需的行为。

def resize_with_outer_zeros(embedding: np.ndarray, target_shape: Tuple[int, ...]) -> np.ndarray:
    padding = tuple((0, max(0, target_size - size)) for target_size, size in zip(target_shape, embedding.shape))
    target_slice = tuple(slice(0, target_size) for target_size in target_shape)
    return np.pad(embedding, padding)[target_slice]

但是,由于它涉及许多纯python元组操作,因此我对其效率和优雅性有强烈怀疑。有没有更好,更简洁的方法呢?