Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 高效阵列存储_Python_Arrays_Numpy_Replace_Storage - Fatal编程技术网

Python 高效阵列存储

Python 高效阵列存储,python,arrays,numpy,replace,storage,Python,Arrays,Numpy,Replace,Storage,我有一个很大的数组(300000行乘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", "

我有一个很大的数组(300000行乘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倍。原因是什么?

一般来说,列表理解(第二种方式)比for循环快。我忘了原因了

另外,如果您的数据集很大,那么使用xrange()比使用range()更快,因为xrange()返回一个小型生成器,它可以动态生成数据。而range()返回整个列表[0..300000]

最后,你应该考虑删除Range-(),xRange-():

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

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

Woah,确实很奇怪。我看到的两个主要区别是,在第二种情况下,使用and迭代器,将元素复制到新列表中,而不是就地更新。您是否尝试过在第二种情况下使用
[[word…for word in row]for row in dataset]
而不是
for i in…
?正如Laurent指出的,在一种情况下,您搜索的是numpy数组,而在另一种情况下是列表。如果在第二种情况下,您将所有右侧包装在
numpy.array(…)
中,您应该得到与第一种情况完全相同的结果。根据您的经验,您不想这样做,因为对于您正在做的工作,列表似乎比数组更有效。另外,
genfromtext
允许您定义
converter
函数,这些函数可以在读取数据时进行清理,有关详细信息,请参阅文档:如果您不向我们展示您的搜索方式,我们如何说明第二种情况下搜索速度更快的原因+1给詹姆。我打算现在就写这件事。我要指出的是,当你需要处理数字数据时,numpy是很好的。在大多数其他情况下,它比纯python解决方案(通常还包括任意大整数算法)的数据元素(正在搜索、处理等)要慢当前所有的数据都是作为字符串进行操作的——尽管所有的数字都是字符串,所以可以想象,在使用genfromtext读取数据时,使用转换器来清理数据会有所帮助。您能否提供几行数据,并概述在清理后在这些数据上运行的操作?