我有一个大的(300,000行乘25列)数组,我在
中读到dataset = numpy.genfromtxt(DataFileName,dtype="string",delimiter=',')
然后清理换行符和引用。我尝试过两种方式:
第一种清理方式
for i in range(len(dataset)):
for j in range(len(dataset[i])):
dataset[i][j] = dataset[i][j].replace("\n", "").replace("\"", "")
第二种清理方式
dataset = [ [word.replace('\n','').replace('"','') for word in dataset[i]] for i in range(len(dataset))]
在此之后,我会对数组进行一些密集搜索以计算一堆东西。如果我使用第二种方式而不是第一种方式进行清理,则搜索快5倍。是什么原因?
答案 0 :(得分:0)
通常,列表理解(第二种方式)比for循环更快。我忘了它的原因。
此外,如果你有一个大数据集,使用xrange()比range()更快,因为xrange()返回一个小型生成器,它可以动态生成数据。而range()返回整个列表[0 .. 300,000]。
最后,你应该考虑完全取消range(),xrange():
dataset = [[word.replace('\n','').replace('"','') for word in line] for line in dataset]
这样做更干净,应该更快,因为你不处理数组订阅,这需要时间。