python - 给定一个向量场 (dx, dy),将位置 (Row, Col) 的矩阵值移动到新位置 (Row + dx, Column + 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 ]
这是由一个 coregistration 问题启发的,但是除了循环遍历元素之外,我还没有找到一个优雅的解决这个问题的方法。我是图像处理的新手,也是 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')
推荐阅读
- qt - 如何在可重用的 QML 组件中保留绑定?
- reactjs - 如何解构这个对象?
- python - 启用急切执行时不支持 tf.gradients。改用 tf.GradientTape
- python - 子线程不能更新父线程变量?
- php - DFS 递归空间使用 PHP
- node.js - 使用直通表更改 Sequelize 默认外键
- java - 用于 Google 协议缓冲区的 Feign 编码器/解码器
- python - glTexImage2D 数据未按预期填充
- android - 如何使用firestoreui在带有来自Firestore的数据的片段上显示RecyclerView中的项目
- c - 如何在C中声明后初始化结构数组