如何解决平方旋转矩阵与另一个坐标矩阵的每个元素的点积
我有一个包含笛卡尔坐标点的 3D 矩阵。在下面显示的示例中,给出了这种矩阵的缩小版本 (a
),尺寸为 10x10x10x3。然后我有一个大小为 3x3 的旋转矩阵 R
,我想对矩阵 a
中给定的每个 3x1 位置向量进行点积,例如 a[0,0]
是位置向量为左上角最坐标点。
一个简单的方法是使用 for 循环 -
import numpy as np
a = np.ones([10,10,3])
R=np.ones([3,3])
a=np.reshape(a,(1000,3))
b=np.array([np.dot(R,xyz) for xyz in a])
b=np.reshape(b,(10,3))
但是当矩阵 a 变大时,这太慢了。有没有办法做一个矩阵乘法类型的事情来加速计算?
解决方法
我想出了一个解决我的问题的方法,它将计算速度提高了 10 倍以上。但它不是一个花哨的矩阵乘法解决方案,因此总是很感激可以使其更快的东西。
我目前的解决方案如下:
X,Y,Z=a[:,:,0],a[:,1],2]
R00X=R[0][0]*X
R10X=R[1][0]*X
R20X=R[2][0]*X
R01Y=R[0][1]*Y
R11Y=R[1][1]*Y
R21Y=R[2][1]*Y
R02Z=R[0][2]*Z
R12Z=R[1][2]*Z
R22Z=R[2][2]*Z
#Rotated Field
Xr=R00X+R01Y+R02Z
Yr=R10X+R11Y+R12Z
Zr=R20X+R21Y+R22Z
b=np.array([Xr,Yr,Zr]).T
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。