【发布时间】:2017-09-20 19:17:33
【问题描述】:
我在文件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。但由于没有替代 Matlab 的fscanf 的 Python 内置函数,我编写了以下 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),代码运行不到一秒。