我是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 RAM。
好吧,然后我尝试用 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
请原谅我的语言知识有限。
任何解决方案都非常受欢迎:我真的需要通过直接读取数据或执行所需的整数转换来加速代码。