私は現在、行列形式で配置できる微分演算子を開発しています。sympy
この場合、オブジェクトargs
を作成するときのリストの順序はMul
、差別化が必要な場所でのみ実行されることを保証するために非常に重要です。
問題は、次の場合です。
input = (t,z,x)
Mul(*input).args
(t, x, z)
若干の並び替えがあったので復帰args
。args
ソートされないようにするには?
私は現在、行列形式で配置できる微分演算子を開発しています。sympy
この場合、オブジェクトargs
を作成するときのリストの順序はMul
、差別化が必要な場所でのみ実行されることを保証するために非常に重要です。
問題は、次の場合です。
input = (t,z,x)
Mul(*input).args
(t, x, z)
若干の並び替えがあったので復帰args
。args
ソートされないようにするには?
引数の順序が正しいために重要なのはなぜですか?
これを防ぐ唯一の方法は、シンボルを非可換 ( x = Symbol('x', commutative=False)
) に設定することです。SymPy オブジェクトは を比較することで比較されるargs
ため、 forx*y*z == y*x*z
が機能するには、引数を標準的にソートする必要があります。(主にパフォーマンス上の理由から) 明示的な並べ替えなしでこれを機能させる試みがいくつかありましたが、たとえそれを行ったとしても、引数の順序についてはまったく保証されないことに注意してください。表現。関数が SymPy で式を再構築することは非常に一般的です。これは通常、元の式とは無関係の他の順序を使用します。