gpt4 book ai didi

python - 为什么 numpy.zeros 不在创建时分配所有内存?我怎么能强制它呢?

转载 作者:太空狗 更新时间:2023-10-30 00:15:54 26 4
gpt4 key购买 nike

我想在 Python 中创建一个空的 Numpy 数组,稍后用值填充它。下面的代码生成一个 1024x1024x1024 数组,其中包含 2 字节整数,这意味着它应该至少占用 2GB RAM。

>>> import numpy as np; from sys import getsizeof
>>> A = np.zeros((1024,1024,1024), dtype=np.int16)
>>> getsizeof(A)
2147483776

getsizeof(A) 中,我们看到数组占用 2^31 + 128 字节(大概是头信息。)但是,使用我的任务管理器,我可以看到 Python 是仅占用 18.7 MiB 内存。

假设数组被压缩,我为每个内存槽分配了随机值,这样它就不会被压缩。

>>> for i in range(1024):
... for j in range(1024):
... for k in range(1024):
... A[i,j,k] = np.random.randint(32767, dtype = np.int16)

循环仍在运行,我的 RAM 正在缓慢增加(大概是因为组成 A 的数组随着不可压缩的噪音膨胀。)我假设强制 numpy 从一开始就扩展这个数组会使我的代码更快。奇怪的是,我还没有在任何地方看到这个记录!

那么,1. numpy 为什么要这样做?和 2. 如何强制 numpy 分配内存?

最佳答案

您还可以找到第一个问题的简洁答案 in this StackOverflow answer .

要回答你的第二个问题,你可以或多或少地强制分配内存:

A = np.empty((1024,1024,1024), dtype=np.int16)
A.fill(0)

因为那时内存被触动了。在我的机器上进行我的设置,

A = np.empty(0)
A.resize((1024, 1024, 1024))

也可以解决问题,但我找不到这种行为的文档,这可能是一个实现细节; realloc 在 numpy 中使用。

关于python - 为什么 numpy.zeros 不在创建时分配所有内存?我怎么能强制它呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51314255/

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