Произведение Numpy dot для массива 4D с его транспонированием не удается - PullRequest
0 голосов
/ 06 октября 2018

Для четырехмерного массива A с размерами (60, 64, 2, 2) необходимо вычислить скалярное произведение с его транспонированием A_t.

A_t имеет размерность (2,2,64,60).Вот что я делаю.

A_t = np.transpose(A)
A_At = A_t.dot(A)

Точечный продукт выдает ошибку

ValueError: shapes (2,2,64,60) and (60,64,2,2) not aligned: 60 (dim 3) != 2 (dim 2)

Я неправильно переношу транспонирование?Я также попытался преобразовать отдельные массивы в пустые матрицы (хотя это и не рекомендуется в нескольких публикациях), а затем вычислить скалярное произведение, но я получаю другую ошибку.

Также исследовал такие непростые темы, как вещание, но я не смог найти ни одного полезного примера для массивов 4D.

Любые входные данные будут благодарны.Спасибо!

Примечание: я использую python 2.7

1 Ответ

0 голосов
/ 06 октября 2018

Если у вас есть желание иметь массив 2x2 в конце , как насчет использования xarray.dot для такого рода задач.С вашей A в руке

>>> A.shape
(60, 64, 2, 2)

вы бы сделали

>>> xA   = xr.DataArray(A, dims=['d1','d2','d3','d4'])
>>> xA_t = xA.T
>>> xr.dot(xA_t, xA, dims=['d1','d2']).shape
(2, 2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...