【问题标题】:Sympy summation with indexed variable带有索引变量的 Sympy 求和
【发布时间】:2014-10-16 10:44:04
【问题描述】:

我尝试使用带有索引变量的 Sum 创建一个 sympy 表达式,如前所述 here 但是,我不能对这个表达式进行lambdify 并给出一个数组来计算总和。 这不可能吗?

【问题讨论】:

    标签: sum sympy calculus


    【解决方案1】:

    大概是这样的?

    >>> s=Sum(Indexed('x',i),(i,1,3))
    >>> f = lambda x: Subs(s.doit(), [s.function.subs(s.variables[0], j)
    ... for j in range(s.limits[0][1], s.limits[0][2] + 1)], x).doit()
    >>> f((30,10,2))
    42
    

    【讨论】:

    • 谢谢!!尽管您的解决方案工作得很好,但为了完整起见,我正在寻找的并不是那个。在您的示例中,您将总和限制在 1 到 3 之间,而我希望从 0 到 n (基本上对于具有可变大小的数组)。我想我现在知道该怎么做,但我不知道如何正确地将代码添加到评论中!
    • 添加一些解释会很好,因为它并不简单(Sum 文档中没有提到 s.limits)。我刚开始使用 sympy;在我看来 [s.function.subs(s.variables[0], j) ... for j in range(s.limits[0][1], s.limits[0][2] + 1)] 用它们的等效整数替换索引元素,然后才替换。这一步似乎是强制性的。
    【解决方案2】:

    你可以使用lambdify。只需确保 sum 的限制与 numpy 数组的可迭代对象匹配即可。

    from sympy import Sum, symbols, Indexed, lambdify
    import numpy as np
    
    x, i = symbols("x i")
    s = Sum(Indexed('x',i),(i,0,3))
    f = lambdify(x, s)
    b = np.array([1, 2, 3, 4])
    f(b)
    

    【讨论】:

      猜你喜欢
      • 2017-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多