Python 给定一个向量场(dx,dy),将位置(行,列)处的矩阵值移动到新位置(行+;dx,列+;dy)
给定一个矩阵Python 给定一个向量场(dx,dy),将位置(行,列)处的矩阵值移动到新位置(行+;dx,列+;dy),python,pandas,numpy,image-processing,Python,Pandas,Numpy,Image Processing,给定一个矩阵 [ 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/effective方法是什么: [
[ 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/effective方法是什么:
[ - 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')
A=np.array([[“A”、“b”、“c”、“d”、“e”、“f”和“]))
l、 n,r=[[0,-1],[0,0],[0,1]]
B=np.数组([[r,r,n],[n,l,l],[r,r,n]]
out=np.zero_类似(A)
i、 j=np.ogrid[:3,:3]
np.add.at(out.view('u4'),(i+B[…,0],j+B[…,1]),A.view('u4'))
出来
#数组(['',a',b'],
#[c]、[d]、[d]、[d],
#['''e','f']],dtype='你能进一步解释一下使用这些元组将abc
转换为cab
的逻辑吗?@AndyL。当然。更明确地说,我使用的向量场是一个变形图。一个玩具示例是一张脸不微笑的图像,和一张脸微笑的图像。从各方面考虑,嘴唇的像素会移动most.给定一个变形图,如何使用变形图从非笑脸近似出笑脸?它是数据帧还是numpy矩阵?向量场的一行中的值是否可以不同?例如:[(0,1)(1,1)(0,1)]?在第0行
,您能否解释a
如何移动到位置(0,1)和c
移动到位置(0,0)?我明白了。为什么构建一个包含不同数据类型(out.view('u4'))的矩阵视图很重要?@batlike,因为numpy不喜欢添加字符串。我假设在实际问题中,您将有一个数字类型,所以您不需要(实际上,不应该)视图转换。。