Pythonic способ выполнять широковещательные двоичные операции между двумя Ndarrays - PullRequest
0 голосов
/ 12 ноября 2019

Что говорит заголовок. Я пытаюсь выполнить следующие задачи:

1) выполнить двоичную операцию (например, +, -, *, /,>, <) между двумя двумерными массивами, <code>A1, A2где A1.shape = (N1, N2_1), A2.shape = (N1, N2_2), чтобы сгенерировать массив массивов 3-й формы, форма которого (N, N2_1, N2_2)

2), выполнить двоичную операцию (например, +, -, *, /,>, <) междудва трехмерных массива numy, <code>A1, A2, где A1.shape = (N1, N2, N3_1), A2.shape = (N1, N2, N3_2) для создания массива 4-d numpy, форма которого (N, N2, N3_1, N3_2)

Я пишу очень непифонический кодсделать первое задание 1). Я буду признателен, если кто-нибудь покажет мне правильный пример кода Python, чтобы сделать это.


моя попытка:

источники данных:

import numpy as np
n_row = 10000
n_col_a1 = 3
n_col_a2 = 4

a1 = np.tile(np.arange(n_col_a1), (n_row, 1))
a2 = np.tile(np.arange(n_col_a2), (n_row, 1))

моя попытка пифонического вещания:

X1 = np.broadcast_to(a1, (n_col_a2, *a1.shape))
X1 = np.moveaxis(X1, 0, -1)

X2 = np.broadcast_to(a2, (n_col_a1, *a2.shape))
X2 = np.moveaxis(X2, 0, -2)

result_a1_minus_a2 = X1 - X2
print(result_a1_minus_a2)
...