Max*_*axB 12 python ubuntu numpy ipython scipy
我写了这个测试脚本:
import numpy as np
import scipy.linalg
n = 130
r = np.array(np.random.normal(size=(n, n)), dtype=np.float32)
e = scipy.linalg.eig(r, left=False, right=False)
print e.mean()
Run Code Online (Sandbox Code Playgroud)
使用IPython运行它,代码总是在几分之一秒内成功(我尝试了大约十几次)
使用Python,代码总是无法收敛(或者只是挂起,对于更大的代码n),如同消息一样
Traceback (most recent call last):
File "strange.py", line 6, in <module>
e = scipy.linalg.eig(r, left=False, right=False)
File "/usr/lib/python2.7/dist-packages/scipy/linalg/decomp.py", line 179, in eig
"with order >= %d have converged)" % info)
numpy.linalg.linalg.LinAlgError: eig algorithm did not converge (only eigenvalues with order >= 130 have converged)
Run Code Online (Sandbox Code Playgroud)
是什么解释了Python和IPython行为的这种差异?相关软件版本是:
编辑
我只用单精度来观察这种行为n >= 130.如果n = 129,代码适用于Python和IPython.
np.random.seed(1234)在imports 之后添加给出相同的结果:IPython收敛,而Python则不收敛.
scipy.linalg.__file__ = '/usr/lib/python2.7/dist-packages/scipy/linalg/__init__.pyc'同时.尽管如此,我猜想IPython和Python会以某种方式设法引入不同的LAPACK版本,但是如何?
我注意到这种奇怪的方式是我正在试验IPython,然后将代码粘贴到*.py我用Python运行的文件中.你可以想象我有多困惑.
编辑2.
np.geterr()同时{'divide': 'warn', 'invalid': 'warn', 'over': 'warn', 'under': 'ignore'}在Python和IPython中
$ ls -l /etc/alternatives/libblas.so
lrwxrwxrwx 1 root root 37 Jun 29 18:21 /etc/alternatives/libblas.so -> /usr/lib/openblas-base/libopenblas.so
Run Code Online (Sandbox Code Playgroud)
当您使用 IPython 时,LD_LIBRARY_PATH可能会有所不同。这可能会导致使用不同的库。您可以在 Python 和 IPython 中检查这一点,看看它们是否相同:
import os
print os.environ['LD_LIBRARY_PATH']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
636 次 |
| 最近记录: |