У меня есть N , 2x4 массивы, хранящиеся в ( 2x4xN ) массиве J
. Я пытаюсь вычислить псевдообратное значение для каждого из массивов N , 2x4 и сохранить псевдообращения в массив (N x 4 x 2) J_pinv
.
То, что я сейчас делаю:
J_pinvs = np.zeros((N, 4, 2))
for i in range(N):
J_pinvs[i, :, :] = np.transpose(J[:, :, i]) @ np.linalg.inv(J[:, :, i] @ J[:, :, i].transpose())
Это работает, но я хотел бы ускорить время вычислений, так как оно будет выполняться в слое нейронной сети, поэтому я хотел бы сделать это как как можно быстрее.
Что я пробовал:
J_pinvs = np.zeros((N, 4, 2))
J_pinvs2[:, :, :] = np.transpose(J[:, :, :]) @ np.linalg.inv(J[:, :, :] @ J[:, :, :].transpose())
Генерирует ошибку :
<ipython-input-87-d8ee1ba2ae5e> in <module>
1 J_pinvs2 = np.zeros((4, 2, 3))
----> 2 J_pinvs2[:, :, :] = np.transpose(J[:, :, :]) @ np.linalg.inv(J[:, :, :] @ J[:, :, :].transpose())
ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 4 is different from 3)
Есть ли способ сделать это с нарезкой, чтобы мне не нужно использовать итератор? У меня проблемы с поиском чего-нибудь онлайн. Любая помощь / предложения будут оценены!
Спасибо, JM