python-每行乘以不同的旋转矩阵

python-每行乘以不同的旋转矩阵,第1张

概述此函数将n行姿势中的每行乘以不同的旋转矩阵.是否有可能通过使用旋转矩阵的3d张量来避免循环?def transform(ref, pose): n, d = pose.shape p = ref[:, :d].copy() c = np.cos(ref[:, 2]) s = np.sin(ref[:, 2]) for

此函数将n行姿势中的每行乘以不同的旋转矩阵.是否有可能通过使用旋转矩阵的3d张量来避免循环?

def transform(ref,pose):    n,d = pose.shape    p = ref[:,:d].copy()    c = np.cos(ref[:,2])    s = np.sin(ref[:,2])    for i in range(n):        p[i,:2] += pose[i,:2].dot(np.array([[c[i],s[i]],[-s[i],c[i]]]))    return p
最佳答案这是一个有np.einsum的-

# Setup 3D rotation matrixcs = np.empty((n,2,2))cs[:,0] = ccs[:,1,1] = ccs[:,1] = scs[:,0] = -s# Perform 3D matrix multiplications with einsump_out = ref[:,:d].copy()p_out[:,:2] += np.einsum('ij,ijk->ik',pose[:,:2],cs)

或者,将c的两个分配步骤替换为涉及一个einsum的一个步骤-

np.einsum('ijj->ij',cs)[...] = c[:,None]

在np.einsum中使用带有True值的optimize标志来利用BLAS.

另外,我们可以在Python 3.x中使用np.matmul / @运算符替换einsum部分-

p_out[:,:2] += np.matmul(pose[:,None,cs)[:,0]
总结

以上是内存溢出为你收集整理的python-每行乘以不同的旋转矩阵 全部内容,希望文章能够帮你解决python-每行乘以不同的旋转矩阵 所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1199619.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存