【发布时间】:2020-05-22 18:28:26
【问题描述】:
我想基于另一个 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 元组操作。有没有更好更简洁的方法呢?
【问题讨论】:
标签: python numpy numpy-ndarray