2017-03-07 128 views
1

讓我們假設我們有兩個列表:的Python,sympy計算多變量函數

variables = ['a','b','c'...] 
values = [1,2,3...] 

和一個簡單的產品功能:

function = 'a*b*c*...*z' 

我試圖做這樣(我不知道它是100%不正確的,但我不知道如何將多個變量替換成sympified expression):

import sympy 
y = sympy.sympify(function).evalf(subs={variable:values}) 
+0

任何想念'reduce()'? –

+0

@ Ev.Kounis'reduce'確實可以非常有用,但在這裏並不需要。 –

回答

4

他re是一個完整的例子。您只需要zip即可混合這兩個列表。從documentation

要同時執行多個換人,合格(舊,新) 成對潛艇列表。

from sympy import sympify 

variables = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] 
values = range(1, len(variables) + 1) 
expression = '*'.join(variables) 
sub_table = zip(variables, values) 
print values 
# [1, 2, 3, 4, 5, 6, 7] 
print expression 
# a*b*c*d*e*f*g 
print sub_table 
# [('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5), ('f', 6), ('g', 7)] 
print sympify(expression).subs(sub_table) 
# 5040 

還有一個好處:

  • 你不需要建立一個額外的字典
  • 你從subs()得到一個確切的整數作爲輸出,而不是僅僅從evalf()的浮動。