Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python中的列表列表创建numpy数组时,内存将耗尽_Python_Arrays_Csv_Numpy - Fatal编程技术网

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

从python中的列表列表创建numpy数组时,内存将耗尽,python,arrays,csv,numpy,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, delimi

我想读入一个以制表符分隔的值文件,并将其转换为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)  
正如我所希望的那样

现在真正的问题来了——实际上,我有一个700000 X 10.tsv文件,带有长字段。我可以毫无问题地将文件读入Python,就像上面的情况一样。但是,当我开始创建
new=np.array(job_posts)
时,我的16 GB笔记本电脑哭着说

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

因此,我的问题是:我如何能够直接将这个文件读入一个numpy数组,可能使用
genfromtxt
或类似的方法……同时也可以通过使用csv.reader中的
quoting=csv.QUOTE_NONE
参数来实现我已经实现的目标

到目前为止,我还没有发现类似于
quoting=csv.QUOTE\u NONE
选项的任何地方都可以使用numpy以标准方式读取tsv文件

这是一个棘手的小问题。我曾考虑过在读入过程中迭代构建numpy数组,但我无法理解

我试过了

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

(3,0)
如果有人有任何建议,我将不胜感激。此外,我知道真正的答案可能是使用熊猫…但在这一点上,我承诺使用numpy有很多令人信服的理由


提前谢谢。

简单地使用
genfromtxt
似乎对我来说很有效,而不用担心引用你的例子,而且你实际上没有显示一份抄本表明它失败了。但是即使引用是一个问题,使用
csv.writer
来更容易地解析文件不是很容易吗?我编辑了这个问题来显示我使用
genfromtxt
得到的结果。最终的解决方案可能确实是事先清理文件,但我想知道是否可以使用numpy中的工具避免这种方法。马特:你的编辑不是很有说服力。:^)你的意思是
“/t”
”\t“,您正在打印
obj.shap
但正在读入
nparray
,如果
obj
是一个数组,则
obj.shap
将给出一个AttributeError。通常最好在控制台中键入一个示例并复制整个内容,输入和输出,精确到.FYI,
np.genfromtxt(“my_tsv2.tsv”,delimiter=“\t”,dtype=object)
给我
数组([[Ann1',Bill1',Chris1',Dick1'],[Ann2',Bill2',Chris2','Dick2'],[Ann3',Bill3',Chris3',Dick3'],dtype=object)
,我想您需要,但我正在使用1.9.0.dev-ef7901d,因此最近可能发生了一些变化。“我有长字段”中的long是多长"? Numpy数组具有相同类型的所有项。对于包含字符数的字符串。因此,如果您有一个包含2000个字符的字段,那么数组中的所有7000000个条目将为2000个字符节省空间,即使大多数人不需要它,这将占用您14 GB的内存。