8

np.einsum次のような確率テーブルを乗算するために使用しています。

np.einsum('ijk,jklm->ijklm', A, B)

問題は、全体で 26 を超える確率変数 (軸) を扱っているため、各確率変数に文字を割り当てると、文字が不足することです。上記の操作を指定して、この問題を回避する別の方法はありますnp.sumnp.dot?

4

3 に答える 3

4

API が 52 軸に制限されていない のeinsum(op0, sublist0, op1, sublist1, ..., [sublistout])代わりに、フォームを使用できます*。i,j,ik->ijkこの冗長形式が ijk 形式にどのように対応するかは、ドキュメントに示されています

OP

np.einsum('ijk,jklm->ijklm', A, B)

のように書かれます

np.einsum(A, [0,1,2], B, [1,2,3,4], [0,1,2,3,4])

(* 注:実装はまだ 26 軸に制限されています。説明については、 @hpaulj の回答彼のバグ レポートを参照してください)


numpy の例からの同等性:

>>> np.einsum('ii', a)
>>> np.einsum(a, [0,0])

>>> np.einsum('ii->i', a)
>>> np.einsum(a, [0,0], [0])

>>> np.einsum('ij,j', a, b)
>>> np.einsum(a, [0,1], b, [1])

>>> np.einsum('ji', c)
>>> np.einsum(c, [1,0])

>>> np.einsum('..., ...', 3, c)
>>> np.einsum(3, [...], c, [...])

>>> np.einsum('i,i', b, b)
>>> np.einsum(b, [0], b, [0])

>>> np.einsum('i,j', np.arange(2)+1, b)
>>> np.einsum(np.arange(2)+1, [0], b, [1])

>>> np.einsum('i...->...', a)
>>> np.einsum(a, [0, ...], [...])

>>> np.einsum('ijk,jil->kl', a, b)
>>> np.einsum(a, [0,1,2], b, [1,0,3], [2,3])
于 2016-06-13T16:57:26.117 に答える