在Python中交换内存?-三个问题

你好,
我正在使用numpy,并希望创建非常大的阵列.我的系统是AMD 64 x 2 Ubuntu 8.04. Ubuntu应该是64位.我有3GB RAM和15 GB交换驱动器.
我一直在尝试使用的命令是;
g = numpy.ones([[1000,1000,1000],numpy.int32)
这返回记忆错误.
一个较小的阵列([500,500,500])工作正常.
两个较小的阵列再次崩溃了系统.
所以...我做了数学. 32位的1000x1000x1000阵列应约为4GB RAM ...显然比RAM大,但比交换驱动器小得多.
1.那么... Numpy有很多开销吗?还是我的系统只是不知何故使用15GB交换区域.
2.有没有办法访问交换区域,或者直接努力进行操作?还是我必须写出自己的numpy缓存系统...
3.在Numpy阵列内部使用数据压缩有多困难?
非常感谢
罗伯特

# 回答1


罗伯特·拉马卡(Robert Lamarca)写道:
有一些建筑问题,您不应该期望
不想要)库 /语言 / OS为您处理
自动地.您甚至都不_want_自动解决方案的原因
是计算机对您正在尝试的问题不了解
解决.如果机器猜错了,它将进行计算
以I/O的速度和4G数据,这将导致地质
计算时间.
关于大问题,编程问题是如何将问题分解为
可处理的子问题(可行的计算尺寸),以及如何缝合
这些结果在一起.这是一个应用人类智力的地方,而不是
机器工作.所以,对不起,没有办法没有办法解决问题
了解它发生的领域和问题正在解决
通过代码.
- 斯科特·戴维·丹尼尔斯(Scott David Daniels)
Robert Lamarca 在AMD64X2,2GB RAM,3GB交换上为我工作.当然有很多分页
;)Python 4019508KB的过程大小.
大约0.5GB ..不足为奇.
如"计算机重新启动"中的崩溃?奇怪的.你说,两个[500,
500,500]阵列有两个?
听起来您的内核或Python不是64位.
对于内核,请查看 /proc /meminfo,您可以获得哪些价值
vmalloctotal.我有vmalloctotal:34359738367 kb.
对于Python,请检查sys.maxint.如果是2147483647,那么您有32位
Python.我的说9223372036854775807.
不,是的.
2 + 3:不需要.
我刚刚在64位系统上尝试了32位Python,使用数字而不是
numpy(没有准备好32位numpy):
g = numeric.seros([[1000,1000,1000],numeric.int32)
Trackback(最近的最新电话):
文件" ",第1行,<模块>
MemoryError:不能为数组分配内存
g = numeric.seros([1000,1000,500],数字32)成功.
因此,看起来您有一个32位内核.
马克
# 回答2


罗伯特·拉马卡(Robert Lamarca)写道:
制作完整的64位版本的Cpython,所有指针
大小是否有64位,甚至存在?
约翰·纳格(John Nagle)
# 回答3


约翰·纳格(John Nagle)

标签: python

添加新评论