gpt4 book ai didi

python - 在 python 中转换带有 numpy 数组中格式化数字的字符串的最快方法是什么

转载 作者:太空宇宙 更新时间:2023-11-04 01:28:21 25 4
gpt4 key购买 nike

我有一个很大的 ASCII 文件 (~100GB),其中包含大约 1.000.000 行我尝试用 python 处理的已知格式化数字。文件太大无法完全读入内存,所以我决定逐行处理文件:

fp = open(file_name)
for count,line in enumerate(fp):
data = np.array(line.split(),dtype=np.float)
#do stuff
fp.close()

事实证明,我在 data = 行中花费了程序的大部分运行时间。有什么方法可以加快这条线吗?此外,执行速度似乎比我从具有格式化读取的 native FORTRAN 程序中获得的执行速度慢得多(请参阅此 question ,我已经实现了一个 FORTRAN 字符串处理器并将其与 f2py 一起使用,但运行时间只能与data = 行。我猜 Python/FORTRAN 之间的 I/O 处理和类型转换扼杀了我从 FORTRAN 中获得的东西)

既然我知道格式,难道不应该有更好更快的方法来使用 split() 吗?像这样的东西:

data = readf(line,'(1000F20.10)')

我尝试了 fortranformat包,效果很好,但在我的例子中,它比 split() 方法慢三倍。

附言正如 ExP 和 root 所建议的,我尝试了 np.fromstring 并做了这个快速而肮脏的基准测试:

t1 = time.time()
for i in range(500):
data=np.array(line.split(),dtype=np.float)
t2 = time.time()
print (t2-t1)/500
print data.shape
print data[0]
0.00160977363586
(9002,)
0.0015162509

和:

t1 = time.time()
for i in range(500):
data = np.fromstring(line,sep=' ',dtype=np.float,count=9002)
t2 = time.time()
print (t2-t1)/500
print data.shape
print data[0]
0.00159792804718
(9002,)
0.0015162509

所以 fromstring 实际上在我的情况下稍微慢一些。

最佳答案

你试过了吗numpyp.fromstring

np.fromstring(line, dtype=np.float, sep=" ")

关于python - 在 python 中转换带有 numpy 数组中格式化数字的字符串的最快方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15920413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com