1

我有一个大(300,000 行 x 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 倍。是什么原因?

4

1 回答 1

0

一般来说,列表推导(第二种方式)比 for 循环更快。我忘记了它的原因。

此外,如果您有一个大型数据集,使用 xrange() 比使用 range() 更快,因为 xrange() 返回一个小型生成器,它会即时生成数据。而 range() 返回整个列表 [0 .. 300,000]。

最后,您应该考虑完全取消 range()、xrange():

dataset = [[word.replace('\n','').replace('"','') for word in line] for line in dataset]

这样做更干净,应该更快,因为您不处理数组订阅,这需要时间。

于 2013-02-05T19:45:45.950 回答