Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy阵列与C++;矢量内存效率 在给定的数据中,哪个对象在内存中通常较小?一个带有dtype INT64的NUMPY数组或int类型的C++向量?例如: v = np.array([34, 23]) std::vector<int> v { 34,23 }; v=np.array([34,23]) std::向量v{34,23};_Python_C++_Numpy - Fatal编程技术网

Python Numpy阵列与C++;矢量内存效率 在给定的数据中,哪个对象在内存中通常较小?一个带有dtype INT64的NUMPY数组或int类型的C++向量?例如: v = np.array([34, 23]) std::vector<int> v { 34,23 }; v=np.array([34,23]) std::向量v{34,23};

Python Numpy阵列与C++;矢量内存效率 在给定的数据中,哪个对象在内存中通常较小?一个带有dtype INT64的NUMPY数组或int类型的C++向量?例如: v = np.array([34, 23]) std::vector<int> v { 34,23 }; v=np.array([34,23]) std::向量v{34,23};,python,c++,numpy,Python,C++,Numpy,一个np.数组实际上有两个部分——对象开销加上形状和步幅等属性,以及一个数据缓冲区。第一个数组对于所有数组的大小大致相同,第二个数组根据元素的数量(以及每个元素的大小)进行缩放。在numpy中,数据缓冲区为1d,与数组形状无关 由于只有2个元素,示例数组的开销部分可能比databuffer大。但对于1000个元素,大小比例则相反 使用np.save保存数组将大致了解内存使用情况。该文件格式写入一个头缓冲区(256字节?),其余为数据缓冲区 我不太熟悉C++存储,虽然我认为它更透明(如果你懂语言)

一个
np.数组实际上有两个部分
——对象开销加上形状和步幅等属性,以及一个数据缓冲区。第一个数组对于所有数组的大小大致相同,第二个数组根据元素的数量(以及每个元素的大小)进行缩放。在
numpy
中,数据缓冲区为1d,与数组形状无关

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

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

我不太熟悉C++存储,虽然我认为它更透明(如果你懂语言)。 但请记住,存储一个数组的效率只是故事的一部分。实际上,在做数学和索引时,你需要考虑内存的使用。
ndarray
view
copy
之间的区别使得预测内存使用量变得更加困难

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字节的头,数据的4个字节。

我猜C++向量-NUMPY数组可能携带更多的元数据(Python类型与C类型相比相当大)。这样说,除非你制作大量数组,否则内存使用差异可能很小(不重要)。不要忘记使用其他语言中的一种数据类型所需的开销。在大多数我意识到的现代C++实现中, int >代码>为32位。如果您想要64位类型,请使用
std::int64\t
std::vector
是一个编译时优化、保证连续的超薄内存包装器,但它没有vector/tensor操作或使用
numpy.ndarray
时现成的优化I/O实用程序(更不用说基于numpy的API和其他类似东西构建的OpenCL扩展了)…如果你能用
std::vector
实现你的算法,那就很难打败它;值得记住的是,在大多数情况下,如果不先做一点big-O工作,它并不完全适合。