对于我的项目,我需要一次在内存中存储两个大型数组。我尝试按如下方式创建它们:
matrix_for_words_train = numpy.zeros(shape=(435679, 542))
matrix_for_words_test = numpy.zeros(shape=(435679, 542))
然而,在我的桌面电脑上,第二个字符串导致MemoryError
。当我尝试在笔记本电脑上执行此操作时,我成功了。令我困惑的是,桌面的内存是笔记本电脑的两倍(8 GB与4)。两台机器都在Ubuntu上运行,桌面机器有12.04,而笔记本电脑有14.04(都是32位),在两台机器上我试图用python 2.7执行上面的脚本
以防万一我用free
检查了可用的内存,看起来没问题(总内存按预期显示,桌面有两倍以上的可用内存)。我想我在这里完全遗漏了一些东西
提前谢谢!
答案 0 :(得分:2)
如果两台计算机都是32位,它们实际上都是4 GB RAM(除非你做了奇怪的事情来解决它,比如启用了PAE)。
32位操作系统通常无法处理超过4 GB的RAM。
此外,操作系统抛出了内存不足异常,不仅在整个系统根本没有内存空闲内存时,而且当它确定它不能为这个特定的进程分配更多的内存。
此外,请注意,数组需要一个连续的内存片段。因此,即使操作系统可以找到足够的空闲内存,也可能找不到这个可用内存量,因为一个继续片段。它甚至可能在整个系统中没有一个0.5 GB RAM的片段。
你必须使用数组吗?您能以不同方式实施解决方案吗如果是这样,我会建议。你想做什么?
无论如何,Out of Memory异常对程序员来说通常不那么具有确定性。您甚至可能在同一天在同一台PC上获得相同的结果。