Python文件读取疑惑

2013-11-06 09:03:21 +08:00
 flyaway
我正在用python处理一个比较大的数据文件,因为这些数据是用来训练模型的,由于模型的限制,必须一次性把数据读入内中,不能使用生成器。数据文件有634M,但是我发现读取文件的过程中,内存开销非常大,还没有完全读完数据,内存使用已经超过3G,我非常好奇这是什么原因导致的?是不是python底层实现的问题?

详细情况:
OS: windows 7 64位
python: 3.3.2
操作: 仅仅是读数据,然后把读入的数据转成数字型,读取过程是按行处理的。
3563 次点击
所在节点    问与答
11 条回复
cloudzhou
2013-11-06 10:22:15 +08:00
这种情况不一定是python读取文件的问题,你可以先实现一个python脚本,只读取到内存,什么都不做,看看需要占用多少内存
yuelang85
2013-11-06 10:29:25 +08:00
应该是把数据转换成python对象造成的开销吧
flyaway
2013-11-06 10:46:59 +08:00
机子内存只有4g,有没有什么解决方案呢?
yelite
2013-11-06 10:50:06 +08:00
@flyaway 在需要使用的时候再转换类型?
flyaway
2013-11-06 10:55:38 +08:00
把读取过程做成生成器,然后在生成器之上对每条数据进行类型转换,这样会不会减少内存消耗呢?我现在在上课,只能暂时和大家纸上谈兵了…
yuelang85
2013-11-06 11:07:10 +08:00
@flyaway 如果你之前转的数据不消灭,这样内存还是会一点一点变大。。。。
sethverlo
2013-11-06 11:07:45 +08:00
我记得好像「python range xrange」这个关键词可以帮到楼主。
flyaway
2013-11-06 11:13:22 +08:00
可是现在的模型算法需要把训练数据整体传过去,内存消耗不可避免,可是我不明白的是,为什么600多m的数据在内存中成为python对象之后会占用如此之多的内存
lookhi
2013-11-06 11:22:02 +08:00
又想马儿跑的快,又想马儿不吃草。
难啊
chlx
2013-11-06 11:42:22 +08:00
我也遇到类似的问题,是用ndarray的两个矩阵拼接时内存开销很大,数据量大时机器吃不消
dreampuf
2013-11-06 12:53:37 +08:00
反序列化带来的开销

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/88204

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX