Numpy добавление массива так же просто, как np.einsum ()? - PullRequest
1 голос
/ 10 марта 2020

Если у меня есть a.shape = (3,4,5) и b.shape = (3,5), использование np.einsum() делает трансляцию, а затем умножает два массива супер просто и явно:

result = np.einsum('abc, ac -> abc', a, b)

Но если я хочу добавьте к двум массивам, насколько я могу судить, мне нужно два отдельных шага, чтобы вещание происходило правильно, и код был менее явным.

b = np.expand_dims(b, 1)
result = a + b

Есть ли выход там, что позволяет мне сделать это дополнение массива с ясностью np.einsum()?

1 Ответ

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

Вещание может происходить только на одном дополнительном измерении . Для добавления этих двух массивов можно развернуть их в одну строку следующим образом:

import numpy as np
a = np.random.rand(3,4,5); b = np.random.rand(3,5);
c = a + b[:, None, :] # c is shape of a, broadcasting occurs along 2nd dimension

Обратите внимание, что это ничем не отличается от c = a + np.expand_dim(b, 1). С точки зрения ясности это вещь личного стиля. Я предпочитаю вещание, другие предпочитают einsum.

...