【发布时间】:2015-05-01 00:55:01
【问题描述】:
我真的很想从 csv 文件创建一个 numpy 数组,但是,当文件长约 50k 行时(如 MNIST 训练集),我遇到了问题。我尝试导入的文件如下所示:
0.0,0.0,0.0,0.5,0.34,0.24,0.0,0.0,0.0
0.0,0.0,0.0,0.4,0.34,0.2,0.34,0.0,0.0
0.0,0.0,0.0,0.34,0.43,0.44,0.0,0.0,0.0
0.0,0.0,0.0,0.23,0.64,0.4,0.0,0.0,0.0
它适用于 10k 行长的东西,比如验证集:
import numpy as np
csv = np.genfromtxt("MNIST_valid_set_data.csv",delimiter = ",")
如果我对训练数据(更大的文件)做同样的事情,我会得到一个 c 风格的分段错误。除了将文件分解然后拼凑之外,有谁知道更好的方法吗?
最终结果是我想将数组腌制到类似的mnist.pkl.gz 文件中,但如果我无法读取数据,我就无法这样做。
任何帮助将不胜感激。
【问题讨论】:
-
这只有大约 450000 个浮点数,应该只需要大约 3.6MB,这在任何可以首先运行 NumPy 的平台上都不是问题,这让我觉得可能有问题你的 NumPy 安装。你有哪些 Python 和 NumPy 版本,你在什么平台上,你是如何安装它们的?
-
如果您只是想要一种解决方法,可以动态地分解文件,而不是在磁盘上;只需
genfromtxt对包含每批 10K 行的类文件对象,而不是对文件名(然后您可以将stack它们放在一个单行中)。但你不应该需要一个。 -
另一种解决方法是使用 stdlib
csv模块将文件读入可迭代的行,并使用fromiter将其转换为箭头。那会慢很多……但谁在乎呢?