在給定完全相同的數據的情況下,哪個對象在內存中通常較小:使用dtype int64的一個numpy數組或一個類型爲int的C++向量?例如:Numpy數組與內存效率的C++向量
v = np.array([34, 23])
std::vector<int> v { 34,23 };
在給定完全相同的數據的情況下,哪個對象在內存中通常較小:使用dtype int64的一個numpy數組或一個類型爲int的C++向量?例如:Numpy數組與內存效率的C++向量
v = np.array([34, 23])
std::vector<int> v { 34,23 };
有有效2份到np.array
- 對象內務操作,再加屬性,如形狀和進展,和一個數據緩衝器。第一個尺寸與所有陣列的尺寸大致相同,第二個尺寸與元素數量(以及每個元素的尺寸)一致。在numpy
數據緩衝區是1d,無論陣列形狀如何。
只有2個元素,示例數組的開銷部分可能大於databuffer。但具有1000個元素的大小比例是相反的。
使用np.save
保存數組將大致介紹內存使用情況。該文件格式寫入一個頭緩衝區(256字節?),其餘的是數據緩衝區。
我對C++存儲不太熟悉,但我認爲它更透明(如果您知道該語言)。
但是記住存儲一個數組的效率只是故事的一部分。在實踐中,你需要考慮數學和索引時使用的內存。 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 * len個字節。
事實上,關於效率是一個相對概念的觀點是關鍵。 'std :: vector
我猜C++向量 - numpy數組可能會攜帶更多元數據(因爲python類型與C類型相比相當大)。有了這個說法,內存使用差異可能會很小(無關緊要),除非您製作大量的數組。 – mgilson
不要忘記使用其他語言中的其中一種數據類型所需的開銷。 – user2357112
在我知道的大多數現代C++實現中,「int」是32位。如果你想要一個64位的類型,使用'std :: int64_t'。 –