Следующий метод класса доставляет мне неприятности:
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 форматирования массива. Единственный способ найти правильный массив - назначить каждому индексу массива правильное значение, что работает, но мне трудно поверить, что это единственный способ сделать это.