我想用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
result=numpy.zeros((20,20,20,30,30,30))
MemoryError
如果我使用这样的较小尺寸:
result=numpy.ones((10,10,10,20,20,20))
然后代码工作.
有人能告诉我形状元组的限制吗?
解决方法:
它不是形状元组的基本限制,它是你的系统上没有足够的内存(RAM),因此是MemoryError.
20 * 20 * 20 * 30 * 30 * 30再次是2.16亿64位(8字节)浮点数或略高于1.6 GB的RAM.那么在此时运行脚本时你有1.6 GB的RAM吗? (不要忘记python,操作系统,其他正在运行的程序等使用的所有RAM).如果您使用的是linux / unix,则可以通过在命令提示符下键入free -m来查看可用内存量.在Windows中,您可以通过转到任务管理器查看可用内存.此外,一些操作系统限制单个进程(如python)可以分配的内存量;例如,32位窗口每个进程仅提供2 GB的地址空间.
将其与20 * 20 * 20 * 10 * 10 * 10进行比较,仅为~0.06 GB(或仅减少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显示为1.000000000000001与64位浮点数,但不是32位浮点数.
标签:python,numpy