首页 > 解决方案 > 类方法中的 Numpy 数组创建问题

问题描述

以下类方法一直给我带来麻烦:

def align(self,array,a):
   aligned=np.zeros(array.shape)
   b=[0,0,1]
   v=np.cross(a,b)
   c=np.dot(a,b)
   I=np.eye(3,3)
   vx=np.zeros((3,3))
   vx=[[0,-v[2],v[1]],[v[2],0,-v[0]],[-v[1],v[0],0]]
   rotmatrix=I + vx + (vx @ vx)/(1+c)
   aligned = rotmatrix @ array.T
   return aligned

我得到的错误信息是:

TypeError: unsupported operand type(s) for +: 'float' and 'list'

在调查了旋转矩阵的每个分量之后,我确信正在破坏的操作是我的矩阵乘法 (vx @ vx)。

为了生成 vx 矩阵,我在 numpy 中尝试了各种不同的东西,例如 np.asarray、np.vstack、np.array,有和没有初始化一个零数组。打印出 vx 时,根据我的尝试,它可以是一个列表数组,也可以是一个常规的 python 列表列表。它从来没有正确的 numpy 数组格式。我发现让数组正确的唯一方法是将数组的每个索引分配给正确的值,这是可行的,但我很难相信这是唯一的方法。

标签: pythonarraysnumpyoop

解决方案


经典的方式怎么样vx = np.array([[0,-v[2],v[1]],[v[2],0,-v[0]],[-v[1],v[0],0]])


推荐阅读