さて、sympyオブジェクト(式)の多次元のnumpy配列がいくつかあります。例えば:
A = array([[1.0*cos(z0)**2 + 1.0, 1.0*cos(z0)],
[1.0*cos(z0), 1.00000000000000]], dtype=object)
等々。
私がやりたいのは、einsumを使用してこれらの配列のいくつかを乗算することです。これは、以前に行っていた数値計算からその構文をすでに持っているためです。問題は、私が次のようなことをしようとすると
einsum('ik,jkim,j', A, B, C)
タイプエラーが発生します:
TypeError: invalid data type for einsum
確かに、グーグルで簡単に検索すると、einsumはおそらくこれを行うことができないことがわかりますが、理由はわかりません。特に、これらの配列でnumpy.dot()関数とnumpy.tensordot()関数を呼び出すと、魅力のように機能します。テンソルドットを使用して必要なことを行うことはできますが、上記のような50個ほどのアインテンの合計(インデックスの順序が非常に重要な場合)をネストされたテンソルドット呼び出しに置き換える必要があると考えると、脳が痛くなります。さらに悪夢のようなのは、そのコードをデバッグして、誤って配置された1つのインデックススワップを探す必要があるということです。
簡単に言えば、tensordotがオブジェクトで機能するのに、einsumが機能しない理由を誰かが知っていますか?回避策に向けた提案はありますか?そうでない場合は、ネストされたテンソルドット呼び出しに独自のラッパーを作成する方法について、einsum表記にいくらか似ています(文字ではなく数字で構いません)。