贝贝60秒:为什么没必要死磕
曲政 / 2019-10-26
今天是贝贝报告给你的第 240 天
2019-10-26 星期六
今天遇到一个小坎。算一个比较长的表达式,用 Sympy 的 lamdify 函数,总是报错。
我把提示信息输入搜索引擎,两三个网址好像在说这是 Numpy 的一个 bug,在新版中已经解决。于是我想更新 numpy 版本试试,Pycharm 无法查看这个项目的虚拟环境中的软件包。我重装 Pycharm,不行。安装 Anaconda,还是找不到 conda 可执行文件。后来在 Anaconda 集成开发环境中打开项目,我才更新成功。但还是 lambdify 不成。这样死磕一下,过去一个小时。
转一圈,一转念,我想开了。与其把表达式通过 lambdify 变成函数,我何不就用 Sympy 的 subs 方法代入自变量值呢。一试之下,果然可行。随后我把其它函数化的动作也替换掉了。
你可能会好奇了,既然 sympy 原生的 subs 方法就可以达到目的,为什么之前要把所有表达式都函数化?那是在学用 b_spline_set 时,那里的文档说这个计算比较费时,最好只算一次,然后把各个基函数的表达式给函数化,方便后续列方程、算系数。
现在我不用 b_spline,自己写多项式;我的某个表达式经过微分变得太长,是一个特殊情况。就是说,在前进的路上,绊到这块石头已经没必要,当然也就不用跟它死磕啦。