繁体   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