在给定完全相同的数据的情况下,哪个对象通常在内存中更小:具有 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++ 存储,但我认为它更透明(如果您了解该语言)。
但请记住,存储一个数组的效率只是故事的一部分。在实践中,您需要考虑在进行数学运算和索引时使用的内存。 view
和 copy
之间的 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/