给定一个矩阵
[ 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')