scipy pytohn在linux上得到的结果与python在windows上得到的结果不同,

hfsqlsce  于 2022-11-10  发布在  Linux
关注(0)|答案(1)|浏览(133)

我试着在一个集群上运行一个计算代码。但是从计算机和集群上得到的结果是不同的,集群往往会崩溃。我认为这是因为软件的问题,因此在集群中安装了与计算机相同版本的miniconda。但是,它出现了相同的问题。
更复杂的计算结果在不同的计算机上进行了验证,结果在数值上是一致的,与分析计算结果相匹配。但使用同一个python软件包的集群提供了不同的结果,而且往往会崩溃。
附上了一个例子。

from scipy import integrate
import numpy as np

def integrand(theta, t,theta_1x,theta_2x): 
    return np.sin(t/2)*np.sin(theta)*np.cos(t/2)**2/np.sqrt(t-b+a)/np.sqrt(b+a-t)*np.sin(theta_1x)/theta_1x/theta_2x;

def theta_integral(t,ax,bx):
    return integrate.quad(integrand, bx-ax, t , args=(t,ax,bx,))[0]

b=1.5
a=0.1
integral_result_temp=integrate.quad(theta_integral, b-a,b+a ,args=(a,b,) );
print(integral_result_temp)

该计算机

Python 3.9.12 (main, Apr  4 2022, 05:22:27) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.

该集群

Python 3.9.12 (main, Jun  1 2022, 11:38:51)
[GCC 7.5.0] :: Anaconda, Inc. on linux

他们使用了相同版本的软件包

import numpy as np
print(np.__version__)
import scipy as scipy
print(scipy.__version__)

1.21.5
1.7.3

计算机提供了一个结果

(0.07410654702360654, 1.34140350493972e-08)

其中该群集提供了

(0.07410654255620497, 1.1830009194468971e-11)

正如你所看到的,他们的结果已经不同了,实际上超出了不同的方差。
在一个更复杂的集成版本中,计算机能够提供正确的结果,而集群通常失败。
这怎么可能?怎么解决?
相关:What's the difference between Python built by MSC and Python built by GCC?

baubqpgj

baubqpgj1#

我可以保证你不是在处理一个不精确的浮点运算的问题。这里有一个关于这个主题的问题:
Is floating point math broken?

相关问题