将字符串转换为 int 太慢 [英] Converting string to int is too slow
问题描述
我有一个程序,每行读取 3 个字符串 50000.然后它会做其他事情.读取文件并转换为整数的部分占用了总运行时间的 80%.
I've got a program that reads in 3 strings per line for 50000. It then does other things. The part that reads the file and converts to integers is taking 80% of the total running time.
我的代码片段如下:
import time
file = open ('E:/temp/edges_big.txt').readlines()
start_time = time.time()
for line in file[1:]:
label1, label2, edge = line.strip().split()
# label1 = int(label1); label2 = int(label2); edge = float(edge)
# Rest of the loop deleted
print ('processing file took ', time.time() - start_time, "seconds")
上述过程大约需要 0.84 秒.现在,当我取消注释该行
The above takes about 0.84 seconds. Now, when I uncomment the line
label1 = int(label1);label2 = int(label2);edge = float(edge)
运行时间上升到大约 3.42 秒.
the runtime rises to about 3.42 seconds.
输入文件格式为:str1 str2 str3
per line
The input file is in the form: str1 str2 str3
per line
函数 int()
和 float()
有那么慢吗?我该如何优化?
Are the functions int()
and float()
that slow? How could I optimize this?
推荐答案
我能够获得与您几乎相同的时间安排.我认为问题出在我的代码上:
I'm able to get almost same timings as yours. I think the problem was with my code that was doing the timings:
read_james_otigo 40 msec big.txt
read_james_otigo_with_int_float 116 msec big.txt
read_map 134 msec big.txt
read_map_local 131 msec big.txt
read_numpy_loadtxt 400 msec big.txt
read_read 488 usec big.txt
read_readlines 9.24 msec big.txt
read_readtxt 4.36 msec big.txt
name time ratio comment
read_read 488 usec 1.00 big.txt
read_readtxt 4.36 msec 8.95 big.txt
read_readlines 9.24 msec 18.95 big.txt
read_james_otigo 40 msec 82.13 big.txt
read_james_otigo_with_int_float 116 msec 238.64 big.txt
read_map_local 131 msec 268.05 big.txt
read_map 134 msec 274.87 big.txt
read_numpy_loadtxt 400 msec 819.42 big.txt
read_james_otigo 39.4 msec big.txt
read_readtxt 4.37 msec big.txt
read_readlines 9.21 msec big.txt
read_map_local 131 msec big.txt
read_james_otigo_with_int_float 116 msec big.txt
read_map 134 msec big.txt
read_read 487 usec big.txt
read_numpy_loadtxt 398 msec big.txt
name time ratio comment
read_read 487 usec 1.00 big.txt
read_readtxt 4.37 msec 8.96 big.txt
read_readlines 9.21 msec 18.90 big.txt
read_james_otigo 39.4 msec 80.81 big.txt
read_james_otigo_with_int_float 116 msec 238.51 big.txt
read_map_local 131 msec 268.84 big.txt
read_map 134 msec 275.11 big.txt
read_numpy_loadtxt 398 msec 816.71 big.txt
这篇关于将字符串转换为 int 太慢的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!