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

使用pandas MultiIndex出现内存泄漏问题(附最小复现示例)

MultiIndex 导致内存异常增长问题排查

我通过pd.MultiIndex组织时间轨迹矩阵,实现将多条时间轨迹平均到指定数量分箱的功能。但运行时内存占用远超预期:最终生成的output数组仅占6MB,而循环执行过程中内存增长超过200MB。对比未使用MultiIndex的相似逻辑代码,不存在这种内存异常增长的情况,我怀疑是pd.MultiIndex存在bug,也可能是自己代码有疏漏,恳请帮忙排查。

复现代码

import numpy as np
import pandas as pd

# 单条轨迹长度
trace_len = 2500

# 分箱数量
bin_num = 300

# 轨迹矩阵维度
L1 = 70
L2 = 100

index = pd.MultiIndex.from_product([range(L1), range(L2)])
traces = np.random.random((L1*L2, trace_len))
traces_df = pd.DataFrame(traces, index=index)

# 生成300个随机分箱
bins = [index.to_frame().sample(frac=1, replace=True) for _ in range(bin_num)]
bins = [pd.MultiIndex.from_frame(bin) for bin in bins]

def bin_single(traces: pd.DataFrame, bin_idx: pd.Index) -> np.array:
    """ 计算同时存在于traces和bin_idx中的所有轨迹的累积和 """
    bin_idx = bin_idx.intersection(traces.index)
    binned = traces.reindex(bin_idx, copy=False)
    return binned.sum(axis=0, skipna=False).to_numpy()

output = np.empty((bin_num, trace_len))
for n, bin in enumerate(bins):
    output[n] = bin_single(traces_df, bin)

print(output.nbytes)

内存变化情况

内存分配变化

未使用MultiIndex的对比代码

import numpy as np
import pandas as pd

# 单条轨迹长度
trace_len = 2500

# 分箱数量
bin_num = 300

# 轨迹矩阵维度
L1 = 70
L2 = 100

traces = np.random.random((L1*L2, trace_len))
traces_df = pd.DataFrame(traces)
index = traces_df.index

# 生成300个随机分箱
bins = [index.to_frame().sample(frac=1, replace=True) for _ in range(bin_num)]
bins = [pd.MultiIndex.from_frame(bin) for bin in bins]

def bin_single(traces: pd.DataFrame, bin_idx: pd.Index) -> np.array:
    """ 计算同时存在于traces和bin_idx中的所有轨迹的累积和 """
    bin_idx = bin_idx.intersection(traces.index)
    binned = traces.reindex(bin_idx, copy=False)
    return binned.sum(axis=0, skipna=False).to_numpy()

output = np.empty((bin_num, trace_len))
for n, bin in enumerate(bins):
    output[n] = bin_single(traces_df, bin)

print(output.nbytes)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:09:22