我有一个包含浮点数的数据集,在文件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)
这段代码可以运行,但我的一些数据集可能会有多达 200,000 行,而我展示的 Python 代码对于读取大型数据集(约 10 分钟)来说非常慢。另一方面,Matlab 的
fscanf
只需要几秒钟就可以完成任务。那么,在 Python 中是否有比我的代码更快(优化)的方法来完成这项工作呢?我真的很感激任何建议。
data = data + cline
替换为data.extend(cline)
,代码运行时间少于一秒钟。 - Carlos Herrera