Python 类方法中的Numpy数组创建问题

Python 类方法中的Numpy数组创建问题,python,arrays,numpy,oop,Python,Arrays,Numpy,Oop,下面的类方法给我带来了麻烦: 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

下面的类方法给我带来了麻烦:

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数组格式。我发现的唯一正确的方法是将数组的每个索引赋给正确的值,但我很难相信这是唯一的方法。

经典方法如何
vx=np.array([[0,-v[2],v[1]],[v[2],0,-v[0]],[-v[1],v[0],0]])

vx赋两次,一次为(3,3)数组,再次作为列表。您可以对对齐的
进行相同的尝试。在Python中,我们不“声明”变量类型。我们创建一个对象并将其分配给一个变量。如果我们将另一个对象分配给变量,则初始分配将丢失。是的,我知道在python中初始化变量是不必要的,但是我过去遇到过一些问题,这些问题都是通过初始化数组/变量来解决的,这就是为什么我试着在修改数组时只需要初始化数组。初始化数组与初始化变量完全不同。无论如何,这里的问题是,第二个
vx
赋值是一个列表,而不是一个数组。啊,我明白了,就是这样!谢谢你,我不知道这会造成这个问题,我忘了说那是我第一次尝试的。我不明白为什么会返回一系列列表