Лучший способ обработать массив матриц (3D-матрицу) способом numpy / Pythoni c? - PullRequest
0 голосов
/ 21 марта 2020

У меня есть вопрос, связанный с кодом ниже. Я обнаружил, что делать эту операцию довольно часто, и хотел бы найти лучший способ сделать это. Возможно, существует определенная c функция или известный метод для решения этой проблемы.

Проблема: У меня есть массив двумерных матриц (трехмерная матрица), к которым необходимо применить какую-то операцию на 2D матрицу в этом массиве.

Мое решение: Просто используйте для l oop или для понимания до l oop через первое измерение и агрегируйте результаты в список.

Примечание. Мне известно, что A.append () добавляет сюда ссылки, а не копирует. Я исправил эту проблему копию. Это еще одна причина, почему я хотел бы найти лучшее решение для этого, которое не смешивает numpy структуры с Python собственными списками.

Я пытаюсь выполнить эту операцию

enter image description here

, но на массиве X (большой x) и соответствующий массив x_hat по вертикали numpy. Я ищу чистый 3D (или 2D) способ справиться с 3D-умножением матриц, как это.

P2_hat = np.ones((3,4)) #<-- [3, 4] X
pts3D_norm #<--------------- [n, 4]
x_hat #<---------------------[n, 2] x_hat

#Create null matrix for all 2D points
#-------------------minimum example of the operation
B = []
for i in range(n):
    null = np.array([[1.0 , 0.0, -x_hat[0, i]],
                     [0.0 , 1.0, -x_hat[1, i]]])
    B.append(null)
B = np.stack(B, axis=0)
#-------------------minimum example of the operation

A = []
for i in range(n):
    null = np.array([[1.0 , 0.0, -x_hat[0, i]],
                     [0.0 , 1.0, -x_hat[1, i]]])
    Ai = np.kron(null, pts3D_norm[:,i])
    omega = P_hat[2] @ pts3D_norm[:,i]
    Ai = Ai *  1 / omega
    A.append(Ai)
A = np.stack(A, axis=0) #<---------------Final [n, 2, 12]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...