Skip to main content
 首页 » 编程设计

python之将接缝插入 numpy 矩阵

2025年05月04日21bjzhanghao

我有一个带有值的 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]])