繁体   English   中英

Python Numpy.ndarray.shape限制

[英]Python Numpy.ndarray.shape limit

我想用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

如果我使用这样的较小尺寸:

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比特浮动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM