在不同平台上使用Numpy

时间:2015-05-13 00:44:36

标签: 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)

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

然后,我尝试使用:

s = scipy.linalg.solve(a, b)

程序以代码0退出但位于其中间。 然后,我只是做了一个简单的测试:

print 'here1'
s = scipy.linalg.solve(a, b)
print 'here2'

永远不会打印here2

我试过了:

print 'here1'
x, info = numpy.linalg.cg(a, b)
print 'here2'

同样的事情发生了。

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

print numpy.allclose(numpy.dot(a, s), b)

我得到了False(?!)。

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

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

感谢您的帮助。

编辑:

Numpy Suit测试结果:

enter image description here

Scipy Suit测试结果:

enter image description here

3 个答案:

答案 0 :(得分:1)

下载Anaconda包管理器

http://continuum.io/downloads

当您下载它时,它已经为您提供了numpy的所有依赖项。它安装在本地,可以在大多数平台上运行。

答案 1 :(得分:0)

这不是一个真正的答案,但是this blog详细讨论了一个快速发展的生态系统的问题,而不是重复性。

顺便问一下,你使用的是哪个版本的numpy?最新1.9的documentation不报告任何名为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])

答案 2 :(得分:0)

我希望你能找到答案 - 将来的一个选择是使用Docker为每个项目创建一个虚拟机。这样便于携带。

查看一篇很棒的文章here讨论Docker的研究。