我在文件data.txt
中有一个浮点数数据集,其中每行包含可变的列数。例如:
3.0 2.5
1.1 30.2 11.5
5.0 6.2
12.2 70.2 14.7 3.2 1.1
为了阅读它,我可以很容易地在Matlab中使用fopen
和fscanf
的组合。最后一个按列顺序读取数据并将其转换为数组,如下所示:
array = [3.0 2.5 1.1 30.2 11.5 5.0 6.2 12.2 70.2 14.7 3.2 1.1]'
我想把我的Matlab代码翻译成Python。但是,由于没有Python内置函数来替代Matlab的fscanf
,因此我编写了以下Python代码,以与前面描述的相同的方式读取和重新塑造数据:
from numpy import *
data = []
with open('data.txt') as file:
for line in file:
cline = line.split()
data = data + cline
data = array(data)
这是可行的,但是我的一些数据集最多可以有200000行,而且我展示的Python代码对于大型数据集的读取非常慢(大约10分钟)。另一方面,Matlab的fscanf
只需几秒钟或更短的时间就能完成这项工作。那么,在Python中有没有比我的代码更快(优化)的方法呢?你知道吗
如果有任何建议,我将不胜感激。你知道吗
Pandas在处理不规则的列方面比numpy好/快得多,而且应该比普通的带循环的python实现快。你知道吗
使用
read_csv
,后跟stack
,然后访问values
属性以返回numpy
数组。你知道吗numpy.loadtxt
在这里是完美的,但在这里不适用,因为列的数量会改变。你知道吗如果你想要一个简单的列表,你可以通过使用列表来加快它的速度:
(现在我很肯定,考虑到JH在回答中指出的错误,它会更快:
data = data + line
每次都创建一个新的列表:二次复杂性。您可以通过列表压缩来避免这种情况)排了几千行之后,这就需要做很多额外的工作:
只是
data.extend(cline)
。(或者.append()
,如果您想知道哪些数字同时出现在一行上。)考虑存储双精度而不是文本:
相关问题 更多 >
编程相关推荐