[英]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.