【发布时间】:2015-07-24 02:10:03
【问题描述】:
我有一段代码可以计算亥姆霍兹-霍奇分解。 我一直在我的 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 套装测试结果:
Scipy 套装测试结果:
【问题讨论】:
-
您是否仔细检查了版本一致性?旧 Mac 上的版本与新计算机上的(可能)较新版本之间可能发生了一些变化。
-
是的,@Ajean。我还在我的 Mac 中插入了一个笔式驱动器,以获取旧代码并在 Mac 和 Windows 系统上重新运行它。它工作(Mac),但系统太慢,所以我真的很想让它在 Windows 上运行。这似乎根本没有意义。
-
如果
det(b)=0,即使由于精度损失,也意味着您的问题没有很好地定义。与条件恶劣的矩阵问题作斗争并不是正确的方法。 -
感觉这更多是由于 numpy、scipy 版本的变化而不是 Mac/Windows 的差异。还可以尝试在 Mac 和 Windows 上运行 numpy/scipy 测试套件并比较结果。该程序存在于
scipy.linalg.solve上的事实看起来像是一个段错误,请确保正确安装了 BLAS/LAPACK 库。 -
其他需要检查的是作为 numpy 基础的库的版本。 BLAS、LAPACK 和许多其他已安装,并且 Windows 和 Mac 版本之间的构建可能在某些方面有所不同。你在 OSX 和 Windows 上使用了什么安装方法?
标签: python windows macos numpy floating-point-precision