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

标签 python c++ numpy

在给定完全相同的数据的情况下,哪个对象通常在内存中更小:具有 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/

相关文章:

python - 正则表达式简单的多行问题

python - 在词典列表中搜索特定词典的位置

python - 为什么我无法在 Python 3.10 上运行 matplotlib?

c++ - 错误 'LC_TYPE' 未在此范围内声明

c++重载下标运算符的两个版本

python - 如何将 OpenNI VideoFrame 转换为 OpenCV Mat 数据结构?

python - opencv matchtemplate源码中用什么方法处理彩色图像?

c++ - 单元测试模板代码

Python3 Numpy 乘法 : Could not broadcast together with shapes (10, 10000) (10000, 10)

python - 使用 numpy 有效获取正值对