第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

與列表相比,Python Numpy如何節(jié)省內(nèi)存?

與列表相比,Python Numpy如何節(jié)省內(nèi)存?

炎炎設(shè)計 2021-04-08 14:15:24
在研究Numpy時,我遇到了以下代碼:import numpy as npimport timeimport sysS= range(1000)print(sys.getsizeof(5)*len(S))D= np.arange(1000)print(D.size*D.itemsize)輸出為:O/P -  140004000因此,Numpy節(jié)省了內(nèi)存存儲空間。但是我想知道Numpy是如何做到的?資料來源:https : //www.edureka.co/blog/python-numpy-tutorial/
查看完整描述

3 回答

?
嚕嚕噠

TA貢獻1784條經(jīng)驗 獲得超7個贊

NumPy的數(shù)組比Python列表更緊湊-您在Python中描述的列表列表至少需要20 MB左右,而單元格中具有單精度浮點數(shù)的NumPy 3D數(shù)組則需要4 MB。使用NumPy可以更快地訪問讀寫項目。

也許您只關(guān)心一百萬個單元格就不會那么在意,但是您肯定會關(guān)心十億個單元格-這兩種方法都不適合32位體系結(jié)構(gòu),但是如果使用64位版本,NumPy可以節(jié)省大約4 GB的內(nèi)存,僅Python一項就至少需要12 GB(很多指針的大小加倍),這是一個昂貴得多的硬件!

差異主要是由于“間接性”造成的-Python列表是指向Python對象的指針的數(shù)組,每個指針至少4個字節(jié),對于最小的Python對象也至少包含16個字節(jié)(類型指針為4,引用計數(shù)為4,類型為4值-內(nèi)存分配器舍入為16)。NumPy數(shù)組是統(tǒng)一值的數(shù)組-單精度數(shù)字每個占用4個字節(jié),雙精度數(shù)字每個占用8個字節(jié)。靈活性較差,但是您要為標準Python列表的靈活性付出高昂的代價!


查看完整回答
反對 回復(fù) 2021-04-27
?
守著星空守著你

TA貢獻1799條經(jīng)驗 獲得超8個贊

在您的示例中,D.size == len(S)的差異是由于D.itemsize(8)和sys.getsizeof(5)(28)之間的差異。

D.dtype向您顯示NumPy用作int64數(shù)據(jù)類型,每項使用(毫無疑問)64位== 8字節(jié)。實際上,這僅僅是原始數(shù)值數(shù)據(jù),類似于C中的數(shù)據(jù)類型(實際上,它實際上就是這樣)。

相比之下,Python使用aint來存儲項目,(如FlyingTeller所鏈接的問題所指出的那樣)不僅僅是原始的數(shù)值數(shù)據(jù)。


查看完整回答
反對 回復(fù) 2021-04-27
?
繁星淼淼

TA貢獻1775條經(jīng)驗 獲得超11個贊

Andarray將其數(shù)據(jù)存儲在連續(xù)的數(shù)據(jù)緩沖區(qū)中


例如,在我當(dāng)前的ipython會話中:


In [63]: x.shape

Out[63]: (35, 7)

In [64]: x.dtype

Out[64]: dtype('int64')

In [65]: x.size

Out[65]: 245

In [66]: x.itemsize

Out[66]: 8

In [67]: x.nbytes

Out[67]: 1960

被引用的數(shù)組x具有一個內(nèi)存塊,其信息類似于shape和strides,并且此數(shù)據(jù)緩沖區(qū)占用1960字節(jié)。


識別列表的內(nèi)存使用情況例如xl = x.tolist()比較棘手。 len(xl)是35,也就是說,它的數(shù)據(jù)緩沖區(qū)有35個指針。但是每個指針都引用7個元素的不同列表。這些列表中的每一個都有指向數(shù)字的指針。在我的示例中,數(shù)字都是小于255的整數(shù),因此每個數(shù)字都是唯一的(重復(fù)指向同一對象)。對于較大的整數(shù)和浮點數(shù),每個整數(shù)都有一個單獨的Python對象。因此,列表的內(nèi)存占用量取決于嵌套的程度以及各個元素的類型。


ndarray也可以具有objectdtype,在這種情況下,它也包含指向內(nèi)存中其他位置的對象的指針。


還有另一個細微差別-列表的主指針緩沖區(qū)的大小略大,以使其append更快。


查看完整回答
反對 回復(fù) 2021-04-27
  • 3 回答
  • 0 關(guān)注
  • 469 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號