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

为什么float32与float64类型数据的峰值内存占用相同?

问题原因分析
  • 核心诱因是float32测试代码中冗余的arr = arr.astype(np.float32)调用:numpy的astype方法默认会生成全新的数组副本,哪怕转换前后的dtype完全相同,也会申请新的内存空间存储转换结果。
  • 执行该语句时,内存中会同时存在两份长度为1亿的float32数组:还未被垃圾回收的原np.zeros生成的数组、刚通过astype创建的新数组,两者各占400MB,总占用刚好800MB,因此被tracemalloc统计为运行峰值。
  • 语句执行完成后,原数组没有变量引用会被自动回收,所以最终打印的当前内存占用为预期的400MB,和float64的当前占用拉开差距。

测试结果截图:
结果截图

验证方案

把float32测试代码中冗余的astype行删除,重新运行即可看到峰值内存降到400MB左右,符合float32的理论内存占用。
修正后的float32测试代码如下:

import tracemalloc
import numpy as np
tracemalloc.start()
arr = np.zeros((100000000,), dtype=np.float32)
for i in range(100000000):
    arr[i] = i
current, peak = tracemalloc.get_traced_memory()
tracemalloc.stop()
print(f"Current memory usage is {current / 10**6}MB; Peak was {peak / 10**6}MB")

内容的提问来源于stack exchange,提问作者Leo hk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 19:00:00