我有一段代码可以计算Helmholtz-Hodge分解。 我一直在我的Mac OS Yosemite上运行,它运行得很好。然而,一个月前,我的Mac变得非常慢(它真的很旧),我选择购买新的笔记本电脑(Windows 8.1,戴尔)。
在安装所有Python库等之后,我继续我的工作运行相同的代码(在Git中版本化)。然后结果非常奇怪,与旧笔记本中获得的结果完全不同。
例如,我所做的是构造矩阵a
和b
(非常长的微积分),然后我称之为求解器:
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测试结果:
Scipy Suit测试结果:
答案 0 :(得分:1)
答案 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)