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