0

我在使用广播减法时遇到了麻烦。我的问题如下。x我有一个shape数组[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 批量减法或加法的具体示例?

4

0 回答 0