2017-03-07 10 views
1

は、私たちは二つのリストを持っていると仮定しましょう多変数関数を計算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

彼完全な例です2つのリストを組み合わせるには、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 

  • あなたはevalf()からわずかフロートsubs()からの出力として正確な整数を取得し、ない余分なdictの
  • を構築する必要はありません。