从python中的列表列表创建numpy数组时内存耗尽

时间:2014-06-07 03:04:03

标签: python arrays csv numpy

我想在标签分隔值文件中读取并将其转换为numpy数组。该文件有3行。它看起来像这样:

Ann1    Bill1   Chris1   Dick1
Ann2    Bill2   Chris2  "Dick2
Ann3    Bill3   Chris3   Dick3

所以,我使用了这个简单的代码行:

new_list = []
with open('/home/me/my_tsv.tsv') as tsv:
    for line in csv.reader(tsv, delimiter="\t"):
        new_list.append(line)

new = np.array(job_posts)
print new.shape

由于那个讨厌的"字符,我花哨的新numpy数组的形状是

(2,4)

那不对!因此,解决方案是在csv.reader调用中包含参数quoting,如下所示:

for line in csv.reader(tsv, delimiter="\t", quoting=csv.QUOTE_NONE):

太好了!现在我的维度是

(3,4)  
我希望如此。

现在出现了真正的问题 - 实际上,我有一个700,000 X 10 .tsv文件,有长字段。我可以毫无问题地将文件读入Python,就像上面的情况一样。但是,当我到达创建new = np.array(job_posts)的步骤时,我的笨拙的16 GB笔记本电脑哭了,说...

MEMORY ERROR  

显然,我不能在内存中同时拥有这两个对象 - 列表的Python列表和numpy数组。

因此我的问题是:我如何将这个文件直接读入一个numpy数组,可能使用genfromtxt或类似的东西......但也实现了我使用{{1}所取得的成就csv.reader中的参数?

到目前为止,我发现在使用numpy读取tsv文件的标准方法中,quoting=csv.QUOTE_NONE选项中没有任何类比。

这是一个棘手的小问题。我虽然在阅读过程中迭代地构建了numpy数组,但我无法弄明白。

我试过

quoting=csv.QUOTE_NONE

得到了

nparray = np.genfromtxt("/home/me/my_tsv.tsv", delimiter="/t")
print obj.shap

如果有人有任何建议,我会非常感激。此外,我知道真正的答案可能是使用Pandas ......但是在这一点上,我承诺使用numpy有很多令人信服的理由...

提前致谢。

0 个答案:

没有答案