我在使用广播减法时遇到麻烦。我的问题如下。我有一个形状为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)
是否有一些具体的示例,这些示例包括尺寸增大的numpy批量减法或加法运算?