我有一个带有值的 numpy 矩阵。它们不会完全相同,但如果我这样显示,示例会更简单:
input = np.array([
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]
])
现在我有了另一个同样大小的矩阵。有一个数字“接缝”,每列一个数字(不多也不少)。它们在 seam 矩阵中的位置就是我要将它们插入到 input 矩阵中的位置。输入矩阵中的所有值都向右移动。
例如,如果您应用此“接缝”
seam = np.array([
[0, 2, 0, 0],
[0, 0, 3, 0],
[0, 0, 0, 4]
])
到输入矩阵,我想要这个输出:
output = np.array([
[1, 2, 1, 1, 1],
[1, 1, 3, 1, 1],
[1, 1, 1, 4, 1]
])
输入和接缝矩阵将始终具有完全相同的尺寸。输出将具有与输入相同的高度和宽度 + 1。
是否有一种有效的方法来执行此插入操作?
请您参考如下方法:
这是使用掩码重新排列输入值的直接方法:
>>> m, n = seam.shape
>>> output = np.empty((m, n+1), input.dtype)
>>> mask = np.ones((m, n+1), dtype=bool)
>>> nz = np.where(seam)
>>> mask[nz] = False
>>> output[mask]=input.ravel()
>>> output[nz]=seam[nz]
>>> output
array([[1, 2, 1, 1, 1],
[1, 1, 3, 1, 1],
[1, 1, 1, 4, 1]])
