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

合并NPZ文件问题:现有代码仅保留最后一个文件数据

合并多个NPZ文件的正确方法

你提供的代码之所以只保留最后一个文件的数据,是因为dict.update()会直接覆盖相同键名的条目——后面文件里的同键数组会完全替换掉前面的,根本没做数组拼接。

要真正合并NPZ文件里的数组,需要先收集每个键对应的所有数组,再对数组列表进行拼接,具体实现如下:

import numpy as np
import os

# 替换成你的NPZ文件所在目录或直接指定文件列表
npz_dir = "./your_npz_directory"
file_list = [os.path.join(npz_dir, f) for f in os.listdir(npz_dir) if f.endswith(".npz")]

merged_data = {}

# 遍历所有文件,按键收集对应数组
for fname in file_list:
    with np.load(fname) as data:
        for key, arr in data.items():
            if key not in merged_data:
                merged_data[key] = []
            merged_data[key].append(arr)

# 对每个键下的数组列表执行拼接
for key in merged_data:
    # 根据数组的实际维度选择拼接轴(axis),这里默认按第0轴拼接
    # 如果是二维数组要按列拼,改成axis=1即可
    merged_data[key] = np.concatenate(merged_data[key], axis=0)

# 保存合并后的结果
np.savez("merged_all.npz", **merged_data)

注意事项

  • 如果不同NPZ文件里的同键数组维度不匹配,np.concatenate会报错,这时需要先统一数组形状(比如补全维度、调整大小),再用np.vstack/np.hstack等更针对性的拼接方法
  • 如果部分NPZ文件缺少某些键,代码会自动忽略,只保留存在该键的文件中的数组进行合并
  • 使用with np.load(...)上下文管理器可以自动关闭文件,避免资源泄漏

内容的提问来源于stack exchange,提问作者Max Fusté Costa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:22:40