This topic created in 4598 days ago, the information mentioned may be changed or developed.
我正在用python处理一个比较大的数据文件,因为这些数据是用来训练模型的,由于模型的限制,必须一次性把数据读入内中,不能使用生成器。数据文件有634M,但是我发现读取文件的过程中,内存开销非常大,还没有完全读完数据,内存使用已经超过3G,我非常好奇这是什么原因导致的?是不是python底层实现的问题?
详细情况:
OS: windows 7 64位
python: 3.3.2
操作: 仅仅是读数据,然后把读入的数据转成数字型,读取过程是按行处理的。
Supplement 1 · Nov 6, 2013
刚才试了一下,不做任何类型转换,单纯的读数据,放到列表中,内存消耗大概1.2G,但是对每一行做split()操作之后,一瞬间就飙到到2G以上,而且还在不断增加。看来是对数据的操作过程带来了大量的内存消耗……
11 replies • 1970-01-01 08:00:00 +08:00
 |
|
1
cloudzhou Nov 6, 2013
这种情况不一定是python读取文件的问题,你可以先实现一个python脚本,只读取到内存,什么都不做,看看需要占用多少内存
|
 |
|
2
yuelang85 Nov 6, 2013
应该是把数据转换成python对象造成的开销吧
|
 |
|
3
flyaway Nov 6, 2013 via iPhone
机子内存只有4g,有没有什么解决方案呢?
|
 |
|
5
flyaway Nov 6, 2013 via iPhone
把读取过程做成生成器,然后在生成器之上对每条数据进行类型转换,这样会不会减少内存消耗呢?我现在在上课,只能暂时和大家纸上谈兵了…
|
 |
|
7
sethverlo Nov 6, 2013 1
我记得好像「python range xrange」这个关键词可以帮到楼主。
|
 |
|
8
flyaway Nov 6, 2013 via iPhone
可是现在的模型算法需要把训练数据整体传过去,内存消耗不可避免,可是我不明白的是,为什么600多m的数据在内存中成为python对象之后会占用如此之多的内存
|
 |
|
9
lookhi Nov 6, 2013
又想马儿跑的快,又想马儿不吃草。 难啊
|
 |
|
10
chlx Nov 6, 2013 via Android
我也遇到类似的问题,是用ndarray的两个矩阵拼接时内存开销很大,数据量大时机器吃不消
|