给定一个向量场(dx,dy),将位置(行,列)的矩阵值移动到新位置(行 + dx,列 + dy)



给定一个矩阵

[   a   b   -  ]
[   -   e   f  ]
[   g   h   -  ]

其中,为了演示, - 表示零条目。

我们还使用向量场

[   (0,1)   (0,1)   (0,0)  ]
[   (0,0)  (0,-1)  (0,-1)  ]
[   (0,1)   (0,1)   (0,0)  ]

其中,每个元组指定要在矩阵中移动相应元素的数量(行、列(。什么是 Pythonic/有效方法,通过其相应的向量移动每个元素以实现:

[   -   a   b  ]
[   e   f   -  ]
[   -   g   h  ]

这是受到共配准问题的启发,但除了循环使用元素之外,我还没有找到解决这个问题的优雅解决方案。我是图像处理的新手,也是用 Python 编程的新手 - 什么是有效/可接受的方法?

这可以使用np.add.at来完成:

A = np.array([["a","b",""],["","c","d"],["e","f",""]])
l,n,r = [[0,-1],[0,0],[0,1]]
B = np.array([[r,r,n],[n,l,l],[r,r,n]])
out = np.zeros_like(A)
i,j = np.ogrid[:3,:3]
np.add.at(out.view('u4'),(i+B[...,0],j+B[...,1]),A.view('u4'))
out
# array([['', 'a', 'b'],
#        ['c', 'd', ''],
#        ['', 'e', 'f']], dtype='<U1')

最新更新