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

推荐支持类别名索引的N维深度学习实验结果高效数据结构

针对带标签多维实验结果的高效数据结构方案

1. Pandas MultiIndex DataFrame

把嵌套字典转换成带多层索引(MultiIndex)的DataFrame,完美适配你的3D标签结构,支持任意维度的切片和查询:

转换方法

先把嵌套字典展开为扁平的键值对,再构建MultiIndex:

import pandas as pd

# 假设你的RESULTS是目标嵌套字典
flat_data = []
for training_style, ds_dict in RESULTS.items():
    for dataset_name, model_dict in ds_dict.items():
        for model_arch, result in model_dict.items():
            flat_data.append((training_style, dataset_name, model_arch, result))

# 构建带多层索引的DataFrame
df = pd.DataFrame(flat_data, columns=['training_style', 'dataset_name', 'model_arch', 'result'])
df = df.set_index(['training_style', 'dataset_name', 'model_arch'])

灵活查询示例

  • 获取所有训练风格、数据集下模型1的结果:
    # 方法1:用xs选择指定层级的标签
    model1_results = df.xs('1', level='model_arch')
    # 方法2:用loc直接切片
    model1_results = df.loc[:, :, '1']
    
  • 获取训练风格'X'下所有数据集和模型的结果:
    x_style_results = df.xs('X', level='training_style')
    

优点:Pandas生态成熟,支持统计分析、可视化,适合结果是标量或一维数据的场景;缺点:对高维(>3D)数据的支持不如专用多维库直观。

2. xarray 带标签多维数组

xarray专门为带标签的多维数据设计,语法类似NumPy但保留标签,是处理深度学习实验多维结果(比如每个结果是张量、指标数组)的最优选择:

转换方法

import xarray as xr

# 直接从嵌套字典构建DataArray(假设每个结果是标量或同形状数组)
da = xr.DataArray.from_dict(RESULTS)
# 或者手动指定维度与坐标(更灵活)
first_train_style = next(iter(RESULTS.keys()))
first_dataset = next(iter(RESULTS[first_train_style].keys()))
da = xr.DataArray(
    data=[[list(model_dict.values()) for model_dict in ds_dict.values()] for ds_dict in RESULTS.values()],
    dims=['training_style', 'dataset_name', 'model_arch'],
    coords={
        'training_style': list(RESULTS.keys()),
        'dataset_name': list(RESULTS[first_train_style].keys()),
        'model_arch': list(RESULTS[first_train_style][first_dataset].keys())
    }
)

灵活查询示例

  • 获取所有训练风格、数据集下模型1的结果:
    model1_results = da.sel(model_arch='1')
    
  • 获取训练风格'X'、数据集'A'下所有模型的结果:
    xa_results = da.sel(training_style='X', dataset_name='A')
    
  • 结合位置与标签的混合切片:
    # 获取前2种训练风格、所有数据集、模型1的结果
    partial_results = da.isel(training_style=slice(0,2)).sel(model_arch='1')
    

优点:原生支持N维带标签数据,完美适配张量型实验结果,切片/选择语法灵活;缺点:需要额外学习xarray的API,轻量场景可能有点重。

3. 自定义轻量带标签容器

如果不想依赖第三方库,可以自己实现一个简单的容器类,封装嵌套字典并支持类似数组的切片语法:

class LabeledNDArray:
    def __init__(self, data, dims):
        self.data = data
        self.dims = dims  # 维度名称列表,比如['training_style', 'dataset_name', 'model_arch']
    
    def __getitem__(self, keys):
        # 确保索引是元组格式,兼容单维度/多维度查询
        if not isinstance(keys, tuple):
            keys = (keys,)
        current_data = self.data
        for key in keys:
            if key == slice(None):  # 处理冒号全选
                current_data = {k: current_data[k] for k in current_data.keys()}
            elif isinstance(key, str):
                current_data = current_data[key]
            elif isinstance(key, list):
                # 选择当前维度的多个标签
                current_data = {k: current_data[k] for k in key if k in current_data}
            else:
                raise ValueError(f"不支持的索引类型: {type(key)}")
        return current_data

# 使用示例
ln_darray = LabeledNDArray(RESULTS, ['training_style', 'dataset_name', 'model_arch'])
# 获取所有训练风格、数据集下模型1的结果
model1_results = ln_darray[:, :, '1']
# 获取训练风格'X'、数据集['A','B']下所有模型的结果
xb_results = ln_darray['X', ['A','B'], :]

优点:轻量、完全自定义逻辑;缺点:需要自己实现复杂查询(比如布尔索引),缺乏内置的统计分析功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 11:34:56