在不同的平台上使用Numpy

pce*_*con 15 python windows macos numpy floating-point-precision

我有一段代码来计算Helmholtz-Hodge分解.我一直在我的Mac OS Yosemite上运行,它运行得很好.然而,一个月前,我的Mac变得非常慢(它真的很旧),我选择购买新的笔记本电脑(Windows 8.1,戴尔).

在安装了所有Python库等之后,我继续我的工作运行相同的代码(在Git中版本化).然后结果非常奇怪,与旧笔记本中获得的结果完全不同.

例如,我所做的是构造矩阵ab(非常长的微积分)然后我称之为求解器:

s = numpy.linalg.solve(a, b)
Run Code Online (Sandbox Code Playgroud)

这是返回a(错误,并且在我的Mac中获得的结果不同,这是正确的).

然后,我尝试使用:

s = scipy.linalg.solve(a, b)
Run Code Online (Sandbox Code Playgroud)

程序以代码0退出,但在其中间.然后,我做了一个简单的测试:

print 'here1'
s = scipy.linalg.solve(a, b)
print 'here2'
Run Code Online (Sandbox Code Playgroud)

并且here2从未打印过.

我试过了:

print 'here1'
x, info = numpy.linalg.cg(a, b)
print 'here2'
Run Code Online (Sandbox Code Playgroud)

同样的事情发生了.

使用后我也尝试检查解决方案numpy.linalg.solve:

print numpy.allclose(numpy.dot(a, s), b)
Run Code Online (Sandbox Code Playgroud)

我有一个False(?!).

我不知道发生了什么,如何找到解决方案,我只知道在我的Mac上运行相同的代码,但如果我可以在其他平台上运行它会非常好.现在我陷入了这个问题(不再使用Mac)并且没有任何关于原因的线索.

最奇怪的是,我没有收到运行时警告的任何错误,根本没有反馈.

感谢您的任何帮助.

编辑:

Numpy Suit测试结果:

在此输入图像描述

Scipy Suit测试结果:

在此输入图像描述

Ram*_*uet 0

这并不是一个真正的答案,但这篇博客详细讨论了以牺牲可重复性为代价的快速发展的 numpy 生态系统的问题。

顺便问一下,您使用的是哪个版本的 numpy?最新 1.9 的文档没有报告任何称为cg您使用的方法...

我建议使用此示例,以便您(和其他人)可以检查结果。

>>> import numpy as np
>>> import scipy.linalg
>>> np.random.seed(123)
>>> a = np.random.random(size=(10000, 10000))
>>> b = np.random.random(size=(10000,))
>>> s_np = np.linalg.solve(a, b)
>>> s_sc = scipy.linalg.solve(a, b)
>>> np.allclose(s_np,s_sc)
>>> s_np
array([-15.59186559,   7.08345804,   4.48174646, ..., -16.43310046,
    -8.81301553, -10.77509242])
Run Code Online (Sandbox Code Playgroud)