You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Numpy NDarray与Tensor的内存开销对比及测量方法咨询

NumPy ndarray 与 Tensor 内存开销分析

问题背景

因需存储大型数组用于后续处理,需明确NumPy ndarray和Tensor的内存开销情况,但查找资料未获有效信息,Medium文章也不够详实。

测试结果与疑问

Tensor 测试结果

测试代码及输出:

<tf.Tensor: shape=(3, 3), dtype=int32, numpy=
array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]], dtype=int32)>

In [66]: sys.getsizeof(ts1)
Out[66]: 168

In [67]: ts
Out[67]:
<tf.Tensor: shape=(3, 3), dtype=int64, numpy=
array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]])>

In [68]: sys.getsizeof(ts)
Out[68]: 168

疑问:无论数据类型是int32还是int64,Tensor的sys.getsizeof结果均为168字节,无法体现实际数据的内存差异。

NumPy ndarray 测试结果

测试代码及输出:

In [52]: nmpy = np.array([[1,2,3],[1,2,3],[1,2,3]], dtype = "int32")

In [53]: sys.getsizeof(nmpy)
Out[53]: 156

In [54]: nmpy1 = np.array([[1,2,3],[1,2,3],[1,2,3]], dtype = "int64")
In [55]: sys.getsizeof(nmpy1)
Out[55]: 192

计算分析:

  • 3×3×int32数据占用:36字节,156-36=120字节(额外开销)
  • 3×3×int64数据占用:72字节,192-72=120字节(额外开销)
    疑问:这120字节的额外开销具体存储了什么?推测可能是指向NumPy属性(如内部长度等)的指针,但不确定。

解答与说明

关于 Tensor 的 sys.getsizeof 结果

sys.getsizeof返回的是Tensor对象本身在Python堆中的内存大小,而Tensor的实际数据通常存储在GPU内存或独立的内存缓冲区中,并非直接存在Python对象里。所以不管dtype如何,你看到的168字节只是Tensor这个Python包装对象的大小,不是实际数据的内存占用。

要正确测量Tensor的实际数据内存,应该使用tf.Tensor.nbytes,这个属性会返回实际数据的字节数。比如你的int32 3x3 tensor,ts1.nbytes会返回36;int64的则返回72。

关于 NumPy ndarray 的额外120字节开销

NumPy ndarray的额外开销是其内部元数据的存储,具体包含:

  • 数组的维度(shape)、数据类型(dtype)、步长(strides)信息
  • 指向实际数据缓冲区的指针
  • 引用计数、标志位(比如是否为只读、是否是视图等)
  • 其他内部管理信息

这些元数据的大小在不同平台和NumPy版本中可能略有差异,但120字节是典型64位系统下的开销,你的推测是正确的——这些就是维护数组结构和属性所需的核心数据。

测量内存开销的方法总结

NumPy ndarray

  • sys.getsizeof(arr):返回对象+元数据+数据的总大小
  • arr.nbytes:仅返回实际数据的字节数
  • 额外开销 = sys.getsizeof(arr) - arr.nbytes

TensorFlow Tensor

  • sys.getsizeof(tensor):仅返回Python包装对象的大小,无实际数据参考价值
  • tensor.nbytes:返回实际数据的字节数
  • 如果要查看GPU内存占用,可使用tf.config.experimental.get_memory_info('GPU:0')(需GPU环境)

内容的提问来源于stack exchange,提问作者Phuy Kong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 16:47:23