放送減算で困っています。私の問題は次のとおりです。L は整数、N は問題の変数の数であるx
shapeの配列があります。各要素に含まれる配列[L,N]
を計算する必要があります。L=1 の場合、これは減算でブロードキャストを実行することと同じです。[L,N,N]
l,i,j
x[l,i]-x[l,j]
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 の場合に、2 つの行を複製した例を再作成しようとしました。私が期待するのは、等しい要素を持つ 2 つの 3x3 行列を持つ 2x3x3 配列を取得することです。
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)
数値が大きくなったバッチ処理された減算または加算の特定の例はありますか?