高效的阵列存储

时间:2013-02-05 18:52:17

标签: python arrays numpy replace storage

我有一个大的(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倍。是什么原因?

1 个答案:

答案 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]

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