Объединить два массива и применить функцию - PullRequest
0 голосов
/ 10 марта 2020

У меня есть два 3D numpy массива:

  • M1: форма (x, y, z) заполнена значением = val_x, y, z
  • M2: форма (x, y, k) заполнено значением = val_x, y, k

Один и тот же размер в x и y, но отличается в последнем измерении.

Я бы хотел построить 4D матрицу M с формой (x, y, z, k), где значение = val_1 * val_2.

Я сделал двойной for l oop, который делает это, но это неоптимально, есть ли любая умная матричная операция, чтобы сделать это в numpy?

1 Ответ

1 голос
/ 10 марта 2020

Использовать вещание . Сейчас ваши размеры (x, y, z), (x, y, k). Те, что слева, совпадают, но вам нужно вставить размеры блоков справа, чтобы они выровнялись в соответствии с желаемой формой вывода. Самый простой способ - использовать np.newaxis, который является псевдонимом для None:

M1[..., None] * M2[..., None, :]

... означает «захватить» все измерения, не указанные явно. Он может появляться не более одного раза в индексе. Первый индекс означает захват x, y, z и добавление новой оси, поэтому результирующий вид имеет форму (x, y, z, 1). Второй индекс означает захват x, y, вставка новой оси, затем захват k, поэтому результирующий вид имеет форму (x, y, 1, k). Поэтому поэлементное умножение приводит к массиву (x, y, z, k).

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