Numpy数组与C ++向量的内存效率

时间:2016-06-30 23:49:51

标签: python c++ numpy

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

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

1 个答案:

答案 0 :(得分:2)

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

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

使用numpy保存数组将大致了解内存使用情况。该文件格式写入一个标头缓冲区(256字节?),其余的是数据缓冲区。

我对C ++存储不太熟悉,不过我觉得它更透明(如果你懂语言的话)。

但请记住,存储一个数组的效率只是故事的一部分。在实践中,您需要在进行数学和索引时考虑内存使用。 np.savendarray之间的view区别使得更难预测正在使用的内存量。

copy

这看起来像是80字节的标题,以及4 * len字节的数据。