gpt4 book ai didi

python - Numpy 数组与 C++ vector 在内存效率方面的对比

转载 作者:搜寻专家 更新时间:2023-10-31 02:15:46 25 4
gpt4 key购买 nike

在给定完全相同的数据的情况下,哪个对象通常在内存中更小:具有 dtype int64 的 numpy 数组或类型为 int 的 C++ vector ?例如:

v = np.array([34, 23])
std::vector<int> v { 34,23 };

最佳答案

np.array 实际上有 2 个部分 - 对象开销加上形状和步幅等属性,以及数据缓冲区。第一个对于所有数组具有大致相同的大小,第二个与元素的数量(以及每个元素的大小)成比例。在 numpy 中,无论数组形状如何,数据缓冲区都是 1d。

只有 2 个元素,示例数组的开销部分可能比数据缓冲区大。但是对于 1000 个元素,大小比例则相反。

使用np.save 保存数组可以大致了解内存使用情况。该文件格式写入一个头缓冲区(256 字节?),其余部分是数据缓冲区。

我不太熟悉 C++ 存储,但我认为它更透明(如果您了解该语言)。

但请记住,存储一个数组的效率只是故事的一部分。在实践中,您需要考虑在进行数学运算和索引时使用的内存。 viewcopy 之间的 ndarray 区别使得预测正在使用多少内存变得更加困难。

In [1155]: np.save('test.npy',np.array([1,2]))

In [1156]: ls -l test.npy
-rw-rw-r-- 1 paul paul 88 Jun 30 17:08 test.npy

In [1157]: np.save('test.npy',np.arange(1000))

In [1158]: ls -l test.npy
-rw-rw-r-- 1 paul paul 4080 Jun 30 17:08 test.npy

这看起来像 80 字节的 header 和 4*len 字节的数据。

关于python - Numpy 数组与 C++ vector 在内存效率方面的对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38134980/

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