从 free_symbols 保持 sympy lambdify 中固定的参数顺序
Keep the order of parameters fixed in sympy lambdify from free_symbols
当要求符号 .free_symbols
时,我得到了花括号中的东西(这是 set
)。
如果我将此集合用作 sympy lambdify
的参数列表,它似乎被转换为 list
。这在 doc 中有所暗示,但我建议在进行此转换时在此处发出警告。这样做的一个很好的理由是符号的顺序可能会在此转换中更改。
以我为例
_chiSquare.free_symbols
给出 {c_95_0, c_95_1}
但
list({'c_95_0', 'c_95_1'})
给出 ['c_95_1', 'c_95_0']
我喜欢使用 .free_symbols
自动生成数值函数,但是如果变量的顺序在没有通知的情况下更改,这将很难使用。
我的问题是应该如何以保持参数顺序固定的方式处理 free_symbols
和 lambdify
。
我认为明确地跟踪符号比使用 free_symbols
更好。
如果您必须从 free_symbols
开始工作,那么您可以对它们进行排序以获得一致的顺序:
In [3]: sorted((x*y).free_symbols, key=lambda s: s.name)
Out[3]: [x, y]
当要求符号 .free_symbols
时,我得到了花括号中的东西(这是 set
)。
如果我将此集合用作 sympy lambdify
的参数列表,它似乎被转换为 list
。这在 doc 中有所暗示,但我建议在进行此转换时在此处发出警告。这样做的一个很好的理由是符号的顺序可能会在此转换中更改。
以我为例
_chiSquare.free_symbols
给出 {c_95_0, c_95_1}
但
list({'c_95_0', 'c_95_1'})
给出 ['c_95_1', 'c_95_0']
我喜欢使用 .free_symbols
自动生成数值函数,但是如果变量的顺序在没有通知的情况下更改,这将很难使用。
我的问题是应该如何以保持参数顺序固定的方式处理 free_symbols
和 lambdify
。
我认为明确地跟踪符号比使用 free_symbols
更好。
如果您必须从 free_symbols
开始工作,那么您可以对它们进行排序以获得一致的顺序:
In [3]: sorted((x*y).free_symbols, key=lambda s: s.name)
Out[3]: [x, y]