一般的な問題numpyの:複数の外積
私は形状(nrow,ncols,3)
のndarray
v
を持っていると仮定します。私は、形outer_array
の形状(nrow,ncols,3,3)
を、それぞれのインデックス(nrow,ncol)
で形状(3)
のベクトルのすべての外積を含むように計算したいと思います。もちろん、これはnumpy.einsum
が存在する種類の問題です。 さて、私が試したことはある:
outer_array = numpy.einsum("xyi,xyj->xyij",v,v.conjugate())
今、私はこれが動作することをわからない:outer_array
は対応していない予想される形状、外積の行列の要素を持っているという事実にもかかわらず私が期待しているものまで
私は、これはeinsum
式のラベルの選択によるものだと思う:私は出力式でそれらを再利用していますから、結果をインデックスが繰り返されているため、製品をx
とy
にわたって加算されることになっているが、合計の何とか放送されます。一方
、私が書く場合:
outer_array = numpy.einsum("xyi,uvj->...ij",v,v.conjugate())
numpyのは、対角線(u,v) = (x,y)
が含む形状(ncols,nrow,ncols,nrow,3,3)
の配列、その結果、各対(x,y)
と(u,v)
ため外積のすべての可能な組み合わせを計算します所望の出力。
私が頼ることなく、各インデックスx,y
で私はそれ自体とベクターv
の外積を得る配列を得るためにeinsum表記の最初の2つのインデックスの選択方法精密質問
2番目の式に?
編集 どうやら、このフォームはあまりにも動作するようです:
outer_array = numpy.einsum("...i,...j->...ij",v,v.conjugate())
私はnumpyの放送がどのように便利なだけ鑑賞することができます!
「期待していたものと一致しません」という出力例を掲載できますか?あなたの最初のアプローチは正しいことのように思えます。 – Jaime
あなたは本当に正しいです。予期せぬ結果の問題は別の問題によるものです。 'x'と' y'のインデックスが合計されるという条件で繰り返され、再び出力に現れるので、私は自分のコードがどのように動作するのか、まだ疑問に思います。誰かがそれを説明できますか? – Bafe
関連性があります:http://stackoverflow.com/q/17138393/1461210 –