Numpy Проблемы создания массива в методе класса - PullRequest
0 голосов
/ 10 февраля 2020

Следующий метод класса доставляет мне неприятности:

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

1 Ответ

1 голос
/ 10 февраля 2020

Как насчет классического способа vx = np.array([[0,-v[2],v[1]],[v[2],0,-v[0]],[-v[1],v[0],0]])?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...