如何解决有没有更简单的方法来转换这个 scipy 稀疏矩阵?
我想使用稀疏矩阵来存储由激光测距仪检测到的占用/空闲空间的“地图”。我认为稀疏矩阵非常适合这个问题,因为环境中有更多的可用空间(用 0 表示),而不是障碍物(用 1 表示,或者概率介于 0 和 1 之间的浮点数)。
获得这张地图后,作为匹配算法的一部分,我想对其应用不同的空间变换,例如但不一定限于旋转和平移。
作为转换部分的概念证明,我以坐标格式 (coo_matrix
) 定义了这个小的 SciPy 稀疏矩阵,如下所示:
import numpy as np
from scipy import sparse
row = np.array([2])
col = np.array([2])
data = np.array([1])
shape = (4,4)
m = sparse.coo_matrix((data,(row,col)),shape)
m.toarray()
array([[0,0],[0,1,0]])
例如,我想将这个矩阵绕其中心逆时针旋转 90 度,以获得这个新矩阵:
array([[0,0]])
我所做的是:
- 获取非零点的坐标:
point = [m.col[0],m.row[0],1]
[2,2,1]
- 计算对应于 a) 将中心置于
(1.5,1.5)
和 b) 逆时针旋转 90 度的变换矩阵:
rot = np.array([[0,-1,3],[1,1]])
array([[ 0,[ 1,[ 0,1]])
- 通过将 1) 处的点与 2) 处的矩阵相乘来应用变换:
rot.dot(point)
array([1,1])
有效地将 (2,2)
处的点旋转到 (1,2)
(或相同坐标中的 (1,1)
),中心位于 (1.5,1.5)
。
现在,这感觉相当“手动”。有没有更短的方法来应用这种转换?我知道 scipy 支持一些基于四元数的旋转,但我对一种通用方法更感兴趣,该方法不仅可以包括旋转,还可以包括平移以及基本上任何变换(无论如何,scipy 目前只支持旋转)。
是否有更直接的方法来转换这个矩阵,而不必手动 a) 从坐标构建每个非零点和 b) 将转换应用于每个点?
注意:我使用稀疏矩阵是为了方便和存储,但如果作为中间步骤必须将其转换为另一种格式、转换并转换回稀疏矩阵,那也没关系。
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。