簡體   English   中英

廣播 numpy 數組的底層緩沖區使用了多少內存?

[英]How much memory is used by the underlying buffer of a broadcasted numpy array?

請注意, nbytes不提供正確的值。 例如:

>>> n = 1000
>>> x = np.arange(n)
>>> bx = np.broadcast_to(x, (int(1e15), n))
>>> bx.nbytes
8e18

....這可能需要比地球上更多的 RAM。

編輯:更具體地說,有沒有辦法獲得bx所指的緩沖區的大小? 類似的東西:

>>> x.nbytes
8000
>>> bx.underlying_buffer_size()
8000

請注意,正如您在文檔中所見, broadcast_to返回一個視圖,其中廣播數組可能引用單個內存位置,來自文檔

廣播:數組具有給定形狀的原始數組的只讀視圖。 它通常不連續。 此外,廣播陣列的不止一個元素可以指代單個存儲器位置。

因此,在這種情況下,所有新行都指向相同的內存位置。

為了以字節為單位查看對象的實際大小,您可以使用sys.getsizeof

from sys import getsizeof

getsizeof(bx)
112

這可以通過檢查哪個是內部數組的實際身份來看到:

id(bx[0])
# 1434315204368

id(bx[1])
# 1434315203968

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM