好奇心の横断歩道を創る!

自分の思考をラバーダック・デバッグするためのブログ

Pythonで、文字列で書かれた式に、逐次、代入して計算する

 

文字列で書かれた自然対数や三角関数を含む式を計算するツールを自作。

”個人的に作りたいツールの基盤”の一部になる予定の機能をまとめた。

 

eval()は文字列で書かれた式を計算できるし、関数として定義してたりmathからインポートしたりすればそれなりに複雑な計算でもできるんだけど、

from math import exp, log, sin, cos, pi

def frm(x, mu):

    return 1/(1+exp(x - mu))

print(eval("rfm(5,10)")) # 0.9933071490757153

x, y = 1, 2

print(eval("log(x)**y")) # 0.0

print(eval("sin(pi/4)**2 + cos(pi/4)**2")) # 1.0

”個人的に作りたいツール”には、「文字を使って式を定義しておいて、後から複数回に分けてそれぞれの変数に代入して、値を決める」機能が必要だった。微分積分連立方程式そのほか便利機能満載のSymPyの変数も試したんだけど、そこまで高機能を求めていないし、自分の書き方が悪かったのか、1000やそれ以上の変数を使おうとすると馬鹿みたいに実行時間がかかってしまった。必要十分な機能を備えつつ高速な動作ができないかと思い、仕方なく自作を試してみた。うまくいったかどうかは、まだわからない。

 

github.com

 

機能の説明はレポジトリ内のレジュメファイルに書いている。