numpy使用broadcast_to后nbytes值异常,是Bug还是预期行为?
这是预期行为,不是Bug
核心原因说明:
np.broadcast_to生成的是广播视图,并没有真的分配10×1000000000000这么大的内存块,它只是复用单个0的内存,通过调整数组的步长参数,模拟出大数组的逻辑结构。nbytes属性计算的是数组逻辑上的总字节数,计算方式是「形状各维度乘积 × 单个元素字节数」,完全不考虑数组实际的存储方式(比如是否是视图、步长是否为0)。你例子里默认dtype是float64(8字节/元素),所以10×1000000000000×8=80000000000000,和输出一致。sys.getsizeof(arr)返回的是numpy数组对象本身的内存占用,只包含数组的元数据(形状、dtype、步长、数据指针等),不包含数组元素的实际内存。因为广播视图没有额外分配元素内存,所以这个值很小(120字节是numpy数组对象的基础大小)。
简单说:nbytes是「理论上的逻辑大小」,sys.getsizeof是「数组对象本身的大小」,两者的统计维度完全不同,这是numpy的设计预期。
内容的提问来源于stack exchange,提问作者SiLiKhon
相关产品推荐
相关产品推荐

