gpt4 book ai didi

Python Numpy.ndarray.shape 限制

转载 作者:太空狗 更新时间:2023-10-30 02:34:51 24 4
gpt4 key购买 nike

我想在 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 字节) float 或略多于 1.6 GB 的 RAM。那么此时运行脚本时是否有 1.6 GB 的可用 RAM? (不要忘记 python、操作系统、其他正在运行的程序等使用的所有 RAM)。如果您使用的是 linux/unix,您可以通过在命令提示符下键入 free -m 来查看有多少可用内存。在 Windows 中,您可以通过转到任务管理器来查看可用内存。此外,一些操作系统限制了单个进程(如 python)可以分配的内存量;例如,32 位 Windows 仅为每个进程提供 2 GB 的地址空间)。

将其与 20*20*20*10*10*10 进行比较,后者仅为 ~0.06 GB(或内存减少 27 倍)。

如果你不需要 8 字节 float ,你可以这样做

numpy.zeros(20,20,20,30,30,30, dtype='float32')

这将通过使用单精度(32 位) float 将您的内存占用减半。默认情况下,numpy 使用 dtype='float64'。

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

关于Python Numpy.ndarray.shape 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6021728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com