как правильно использовать трансляцию np.subtract - PullRequest
1 голос
/ 15 апреля 2020

У меня есть 2 матрицы, форма первой (2,64) и форма второй (2,256,64), теперь я хочу сделать np.subtract между этими 2 матрицами, потому что np.subtract(matrix1, matrix2) не может транслироваться автоматически, что я сделал ниже

step_1 = np.subtract(matrix1[0], matrix2[0]).shape  ## shape is (256,64)
step_2 = np.subtract(matrix1[1], matrix2[1]).shape  ## shape is (256,64)
res = np.array([step_1, step_2]) ## shape is (2,256,64)

или

res = np.array([np.subtract(matrix1[i], matrix2[i]) for i in range(2)]) ## shape is (2,256,64)

Могу ли я сделать что-то подобное только с помощью np.subtract (путем установки некоторых видов параметров) в один шаг, чтобы получить тот же ответ (или использовать другую технику, например, np.swapaxes)?

1 Ответ

1 голос
/ 15 апреля 2020

Вы можете ввести новую ось, используя None (который является псевдонимом для np.newaxis), чтобы выровнять их напрямую:

matrix_1[:, None, :] - matrix2

Если вы не хотите использовать некоторые из функций явного вызова np.subtract оператор минус (-) чище.

Другой альтернативой является получение того же представления с помощью np.expand_dims :

np.expand_dims(matrix1, 1) - matrix2

Вы также можете reshape:

matrix1.reshape(matrix1.shape[0], 1, *matrix1.shape[1:]) - matrix2

Решение, которое вы предлагаете с swapaxes, немного drasti c, но будет работать:

(matrix1 - matrix2.swapaxes(0, 1)).swapaxes(0, 1)

Окончательный результат swapaxes необходим для возврата исходной формы. Вы можете достичь аналогичных результатов с transpose:

(matrix1 - matrix2.transpose(1, 0, 2)).swapaxes(1, 0, 2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...