【问题标题】:sympy installed, however sympy.mpmath not foundsympy 已安装,但 sympy.mpmath 未找到
【发布时间】:2015-12-11 14:33:45
【问题描述】:

我想使用sympy中的jacobDN功能,所以我下载了它并python setup.py install它,成功了。

当我想像documentation 那样使用它时:

>>> from sympy.mpmath import *
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named mpmath
>>> 

从 sympy 导入一切成功:

>>> from sympy import *
>>> 

然后我单独安装了 mpmath,然后我可以使用 mpmath 的 ellipfun。但是显示了一个烦人的mpf

>>> from mpmath import *
>>> ellipfun('dn',0.5,0.5)
mpf('0.94297242577738571')
>>> 

问题是如何在sympy.mpmath下使用ellipfun?如何检查我的安装缺陷?

上面的解决方案是最好的!如果不能,如何在 mpmath 中像使用普通函数一样使用 ellipfun?

sympy 安装成功的证据

-> ~$ pip show sympy
---
Name: sympy
Version: 0.7.7.dev
Location: /usr/local/lib/python2.7/dist-packages/sympy-0.7.7.dev-py2.7.egg
Requires: mpmath

-> ~$ pip install --upgrade sympy
Requirement already up-to-date: sympy in /usr/local/lib/python2.7/dist-packages/sympy-0.7.7.dev-py2.7.egg
Requirement already up-to-date: mpmath>=0.19 in /usr/local/lib/python2.7/dist-packages/mpmath-0.19-py2.7.egg (from sympy)
Cleaning up...

【问题讨论】:

  • 显示mpf有什么问题?
  • @leewangzhong 如果我想执行以下操作:x= np.arange(0,10,0.1) mp.ellipfun('dn',x,0.5) plt.plot(x,y)我会得到错误:无法从数组创建 mpf
  • 如果您说它在第二部分中给出错误会有所帮助。这意味着您不能将数组作为第二个参数传递给ellipfun
  • @leewangzhong 是的,但我认为sympy.mpmath 下的ellipfun 应该可以做到这一点。所以我问了这个问题。
  • 我一直在尝试破解它以使其工作近一个小时。 mpmath 还没有为 ndarray 做好准备。只需在 ellipfun 上使用循环即可。

标签: python sympy mpmath


【解决方案1】:

在您安装的 SymPy 开发版中,sympy.mpmath 已被删除。 mpmath 现在是一个外部库,因此您需要单独安装和导入它,就像您所做的那样。

这两个版本完全相同(有一段时间没有任何 mpmath 版本)。

据我所知,mpmath 不支持 numpy 数组。如果你想这样做,你需要使用scipy.special。如果您对多精度浮点数(超出机器精度)感兴趣,则应仅使用 mpmath。如果您对此感兴趣,也可以使用sympy.Float,它是mpf 的包装器,可以很好地与SymPy 对象配合使用。

【讨论】:

  • 我不太明白如何在 scipy.special 中使用 JacobiDN。文件太抽象了。它说 dn,sn 等是返回的。但是我认为它应该是输入参数。
  • @buzhidao 你可以为它开一个新问题。
  • 已打开,请查看是否有anwser
【解决方案2】:

我建议使用非开发版本。 SymPy 0.7.6 是最后一个将 mpmath 与 SymPy 打包的版本。将来,它将是一个依赖项。由于您安装了开发版本,因此您必须独立安装 mpmath。

【讨论】:

  • 为什么建议使用旧版本而不是仅仅安装 mpmath?
  • SymPy 0.7.6 是最新版本。
  • 开发版本,矛盾的是,比最新版本更新。未来的版本将不会有这种行为。当您可以简单地安装mpmath 时,为什么还要依赖它?既然有更简单的解决方案,为什么还要编写以后必须更新的代码?