作者yungyuc (酷狗喵千代)
看板Python
标题Re: [问题] 请问为何我这程式会吃掉过多记忆体?
时间Sun Feb 8 21:37:07 2009
※ 引述《Kuster (克斯特)》之铭言:
: 我的档案格式是一行一行,每行有若干个数字
: 我要将每个数字都读近来
: 说的再清楚一点,这是一个存graph的文字档,每个数字代表各node
: 每行的第一个数字代表起始点,後面跟若干个数字代表这个node有连线到後面那些node
: 我想要自己设计资料结构来储存这些资料
: 以一个一维阵列代表index
: 再用一个一维阵列存data
: 这样若我要取编号为30的那个node有连线到那些node,我就只要下指令:
: data[index[30-1]:index[30]]
: 这样切出来的东西就会是我要的了~
: 这样应该速度快且省记忆体(应该啦)
: 问题是....
: 我的系统是ubuntu 64bit
: 一个int就占了8byte?
: 我尝试使用NumPy指定我的array内整数为Int32,可是依旧肥大
: 直接使用:
: data = range()
: 使用list格式,会占用2.4G ram
: 若用NumPy指定整数为Int32:
: data = array( range() , Int32 )
: 这样记忆体会先标到2.4G,然後下降到1.9G
: 整体来说依旧相当肥
: 直接算的话,我有80M左右的资料量,资料内容是Int32,照理说就:
: 80M * 4byte = 320MB
: 我只要这麽多的记忆体空间就够了
: 造成记忆体占用如此大的原因应该就是数字也是物件的关系吧?猜的
: 请问若我要塞这麽大量的整数进去记忆体,使用python的话该用什麽方法呢?
: 我之前是学Java的,现在想说跳Python看看.....
: 感谢各位前辈!!
作了 a = arange(71242183, dtype='int32') 之後:
31907 yungyuc 16 0 317m 280m 3236 S 0 3.5 0:00.20 python
del a 之後
31907 yungyuc 16 0 46348 9388 3236 S 0 0.1 0:00.21 python
如果 a = arange(71242183, dtype='int64'):
31907 yungyuc 16 0 588m 552m 3240 S 6 6.9 0:00.50 python
处理这麽大量的资料请爱用 numpy
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 76.181.246.83