Может ли numpy einsum() выполнять внешнее сложение?

В numpy мы можем выполнить «внешнее сложение» между двумя векторами a и b следующим образом:

a=np.c_[1,2,3]
b=np.c_[4,5,6]
result=a+b.T # alternatively this can be a.T+b

Можно ли использовать einsum для того же вычисления? Есть ли другие быстрые альтернативы? А если a равно b?


person Bitwise    schedule 11.07.2013    source источник
comment
Я не думаю, что einsum может это сделать (по крайней мере, без использования дополнительных массивов). Я не могу придумать более быстрый способ сделать это, чем простая сумма с использованием широковещательной передачи, которую вы написали, это слишком медленно? Поскольку результат симметричен, вы можете написать расширение, которое вычисляет минимально возможное количество сумм.   -  person jorgeca    schedule 12.07.2013
comment
Вам нужен вектор единиц того же размера, что и векторы a и b I=np.ones(a.shape), что-то вроде: a.T@I + [email protected]   -  person linello    schedule 01.04.2019


Ответы (1)


Другой быстрой альтернативой этой операции является использование:

np.add.outer(a,b)
person Saullo G. P. Castro    schedule 11.07.2013