У меня проблемы с использованием вычитания радиовещания.Моя проблема заключается в следующем.У меня есть массив x
формы [L,N]
, где L - целое число, а N - количество переменных в моей задаче.Мне нужно вычислить массив [L,N,N]
, где в каждом элементе l,i,j
он содержит x[l,i]-x[l,j]
.Если L = 1, это эквивалентно запуску вещания на вычитании: x-x.T
Например, здесь с L = 1 и N = 3:
import numpy as np
x = np.array([[0,2,4]])
x-x.T
Однако, если увеличить размерL вещи становятся более сложными и входят в сферу функции np.einsum
.Поэтому я попытался воссоздать мой пример, в случае L = 2, где я реплицировал две строки.То, что я ожидал бы получить массив 2x3x3 с двумя матрицами 3x3 с равными элементами.
x = np.array([[0,2,4],[0,2,4]])
n = 3
k = 2
X = np.zeros([k,n,n])
for l in range(k):
for i in range(n):
for j in range(n):
X[l,i,j] = x[l,i]-x[l,j]
print(X)
, который возвращает
[[[ 0. -2. -4.]
[ 2. 0. -2.]
[ 4. 2. 0.]]
[[ 0. -2. -4.]
[2. 0. -2.]
[ 4. 2. 0.]]]
Но как сделать это с NumPy Einsum?Я могу получить только продукт:
np.einsum('ki,kj->kij',x,-x)
Существуют ли конкретные примеры вычитаний в пакетном режиме или дополнений с увеличенным размером?