Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy.ndarray.shape limit_Python_Numpy - Fatal编程技术网

Python Numpy.ndarray.shape limit

Python Numpy.ndarray.shape limit,python,numpy,Python,Numpy,我想使用以下代码在Python中使用Numpy创建一个矩阵: import numpy result=numpy.zeros((20,20,20,30,30,30)) numpy.save('result',result) 我得到以下错误: Traceback (most recent call last): File "numpy_memoryerror.py", line 5, in <module> result=numpy.zeros((20,20,20,3

我想使用以下代码在Python中使用Numpy创建一个矩阵:

import numpy

result=numpy.zeros((20,20,20,30,30,30))

numpy.save('result',result)
我得到以下错误:

Traceback (most recent call last):  
File "numpy_memoryerror.py",
line 5, in <module>
    result=numpy.zeros((20,20,20,30,30,30))
MemoryError
然后代码就工作了


有人能告诉我形状元组的限制吗?

它不是形状元组的一个基本限制,而是系统上没有足够的内存(RAM),因此出现了
内存错误

同样,20*20*20*30*30*30是2.16亿个64位(8字节)浮点或略大于1.6GB的RAM。那么,在运行脚本时,您是否有1.6GB的可用RAM?(不要忘记使用python、操作系统、其他运行程序等使用的所有RAM)。如果您使用的是linux/unix,您可以通过在命令提示符下键入
free-m
来查看空闲内存的大小。在windows中,您可以通过转到任务管理器查看可用内存。此外,一些操作系统限制单个进程(如python)可以分配的内存量;e、 例如,32位windows每个进程只提供2 GB的地址空间)

与20*20*20*10*10*10相比,20*20*10*10仅为~0.06GB(或仅为内存的27倍)

如果不需要8字节浮点,可以这样做

numpy.zeros(20,20,20,30,30,30, dtype='float32')
这将通过使用单精度(32位)浮点将内存占用减半。默认情况下,numpy使用dtype='float64'


粗略地说,32位浮点有8位精度,64位浮点有16位精度。这意味着1+1e-8对于32位浮点显示为1,1+1e-16对于64位浮点显示为1,但是1+1e-15对于64位浮点显示为1.000000000000001,而不是32位浮点。

我使用dtype='float32'尝试了它,它工作正常,创建了一个大约860mb的文件。但是,我运行Win7 64位,我有4GB的ram,其中大约有2.2GB可用。顺便说一句,有一种ram交换(分页)机制,用于处理需要更多ram的进程。在这种情况下,它不起作用。@makmiler:请注意,对于
numpy
数组,您需要有连续内存。即使您有足够的内存可以使用,它也不一定是连续的,因为它需要如此大的内存块。Thanks@eat:Windows报告为“可用”的内存是可分页的,因此可以将其分页到单个连续块。@Sven:确定吗?例如,matlab的文档(也要求阵列使用连续的RAM块)报告内存碎片导致内存不足错误。请看:@Sven:这一点很好,但在做出任何最终判断之前,我希望OP能更详细地描述他的环境。AFAIU,即使是64位Windows,但32位进程的用户模式虚拟地址空间(仅限于2GB)也可能出现这种碎片。谢谢我在我的电脑上试用,它会生成一个大小为1.60GB(1728000096字节)的.npy文件。
numpy.zeros(20,20,20,30,30,30, dtype='float32')