我是物理学TCD的实习生。
我编写了一个代码来对随机粒子填充进行一些数据分析。代码是用Python编写的。
代码读取我的主管提供的.txt文件中的数据列。
以下是数据示例:
0.52425196504624715921 0.89754790324432953685 0.44222783508101531913
我写了以下代码来读取数据:
from decimal import Decimal
from numpy import *
c1,c2,r = loadtxt("second.txt", usecols=(0,1,2), unpack=True, dtype = dtype(Decimal))
如您所见,我使用Decimal dtype读取数字的所有小数位,并确保计算可靠。
现在,为了加快我的代码,我想知道是否有一个numpy dtype使事情更快,但仍然使用所有小数位。我试过了:
c1,c2,r = loadtxt("second.txt", usecols=(1,2,4), unpack=True, dtype = float128)
和
c1,c2,r = loadtxt("second.txt", usecols=(1,2,4), unpack=True, dtype = longdouble)
然而,这是输出比较:
Decimal : 0.98924652608783791852
float128 : 0.98924653
longdouble : 0.98924653
float32 : 0.98924655
我使用的是台式机,64位,4GB内存。
那么,我尝试用C ++编写一个代码,它基本上将数据列的每个元素乘以10的足够幂,以便生成一个新的.txt文件,其中包含以下列:
52425196504624715921 89754790324432953685 44222783508101531913
但回到我的Python代码(我必须在Python中执行此操作):
c1,c2,r = loadtxt("second.txt", usecols=(1,2,4), unpack=True, dtype = int)
我收到以下错误消息:
OverflowError: Python int too large to convert to C long
请原谅我对该语言的有限了解。
非常欢迎任何解决方案:我真的需要通过直接读取数据或执行所需的整数转换来加速代码。