【问题标题】:Keep the order of parameters fixed in sympy lambdify from free_symbols保持参数的顺序在 free_symbols 的 sympy lambdify 中固定
【发布时间】:2020-07-08 15:23:05
【问题描述】:

当询问符号 .free_symbols 时,我会在花括号中找到一些东西(即 set)。

如果我将此集合用作 sympy 的 lambdify 的参数列表,它似乎已转换为 listdoc 暗示了这一点,但我建议在进行此转换时在此处给出警告。这样做的一个很好的原因是符号的顺序可能会在此转换中改变。

就我而言 _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_symbolslambdify 以保持参数顺序固定。

【问题讨论】:

    标签: list set sympy lambdify


    【解决方案1】:

    我认为明确跟踪符号比使用free_symbols 更好。

    如果您必须从 free_symbols 工作,那么您可以对它们进行排序以获得一致的顺序:

    In [3]: sorted((x*y).free_symbols, key=lambda s: s.name)
    Out[3]: [x, y]
    

    【讨论】:

    • 澄清一下,我正在使用sp.symarray 生成我的符号,以便例程可以使用$R^n$ 中的函数来处理任何$n$,因此显式跟踪有点违背目的。我错过了我可以将sorted 中的key 指定给name 属性。谢谢
    • 您可以使用list(array.flat)从symarray中获取符号的有序列表
    • 只是为了澄清一下,symarray 在此应用程序中不可用。我有一个 sympy 对象作为函数返回的对象。 symarray 是在函数中创建的,因此在函数之外会丢失。我只有 sympy 表达式,需要弄清楚如何将它变成一个函数,可以有效地对绘图、最小化和类似的东西进行数值评估。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多