У меня есть вопрос, связанный с кодом ниже. Я обнаружил, что делать эту операцию довольно часто, и хотел бы найти лучший способ сделать это. Возможно, существует определенная c функция или известный метод для решения этой проблемы.
Проблема: У меня есть массив двумерных матриц (трехмерная матрица), к которым необходимо применить какую-то операцию на 2D матрицу в этом массиве.
Мое решение: Просто используйте для l oop или для понимания до l oop через первое измерение и агрегируйте результаты в список.
Примечание. Мне известно, что A.append () добавляет сюда ссылки, а не копирует. Я исправил эту проблему копию. Это еще одна причина, почему я хотел бы найти лучшее решение для этого, которое не смешивает numpy структуры с Python собственными списками.
Я пытаюсь выполнить эту операцию
, но на массиве 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]