MATLAB против умножения Numpy - PullRequest
       4

MATLAB против умножения Numpy

0 голосов
/ 10 октября 2019

Я пытаюсь получить следующий результат MATLAB в Python / Numpy.

Код MATLAB:

A = reshape(ones(1, 12), 3,1,4);
B = reshape(ones(3, 1));
size(A .* B) % ans = 3     1     4

Код Numpy:

A = np.ones(12).reshape((3,1,4))
B = np.ones(3).reshape((3,1))
(A * B).shape # (3, 3, 4)

Вопрос:

Как изменить код Numpy, чтобы получить результат, аналогичный MATLAB?

1 Ответ

2 голосов
/ 10 октября 2019

В MATLAB последнее измерение является внешним. Очевидно, что (3,1) расширяется в этом направлении, чтобы соответствовать (3,1,4) другого.

В numpy ведущее измерение является внешним. (3,1) передает в (1,3,1), и вместе с (3,1,4), 1 расширяется до совместного (3,3,4).

Чтобы расширить вВ другом направлении вам нужно быть явным, b[:,:,np.newaxis]). Теперь у вас есть (3,1,1), который вещает с (3,1,4).

Как историческая справка, MATLAB изначально был строго 2d, в Фортране, основной форме столбца. Около версии 3.5 они допускали более высокие измерения, хотя я верю в некое придуманное поведение (отображение последних измерений на второе). Он легко добавляет или сокращает эти последние измерения. Трансляция смысла numpy - еще более новое дополнение, но со специальными правилами MATLAB.

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