np.einsum
次のような確率テーブルを乗算するために使用しています。
np.einsum('ijk,jklm->ijklm', A, B)
問題は、全体で 26 を超える確率変数 (軸) を扱っているため、各確率変数に文字を割り当てると、文字が不足することです。上記の操作を指定して、この問題を回避する別の方法はありますnp.sum
かnp.dot
?
np.einsum
次のような確率テーブルを乗算するために使用しています。
np.einsum('ijk,jklm->ijklm', A, B)
問題は、全体で 26 を超える確率変数 (軸) を扱っているため、各確率変数に文字を割り当てると、文字が不足することです。上記の操作を指定して、この問題を回避する別の方法はありますnp.sum
かnp.dot
?
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])