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

如何无需循环一次性读取目录下所有.npy文件并转为Tensor数据集?

解决方法

错误原因

np.load() 仅接受单个字符串/路径对象作为输入,你传入的 all_npy_path 是张量类型,不符合函数参数要求,因此抛出类型错误。

步骤1:将路径张量转为Python字符串列表

先把存储路径的张量转换成普通的Python字符串列表,根据你使用的框架选择对应方法:

  • PyTorch框架:
    path_list = all_npy_path.tolist()
    
  • TensorFlow框架:
    path_list = all_npy_path.numpy().tolist()
    

步骤2:批量加载所有npy文件

遍历路径列表,逐个加载npy文件并收集数据:

import numpy as np

# 初始化列表存储所有帧数据
all_data = []
for path in path_list:
    frame_data = np.load(path)
    all_data.append(frame_data)

# 将列表转为统一的numpy数组
all_data_np = np.array(all_data)

步骤3:转换为Tensor数据集

根据使用的框架生成对应的Tensor数据集:

  • PyTorch:
    import torch
    from torch.utils.data import TensorDataset
    
    # 转为PyTorch张量
    data_tensor = torch.from_numpy(all_data_np)
    # 创建Tensor数据集
    dataset = TensorDataset(data_tensor)
    
  • TensorFlow:
    import tensorflow as tf
    
    # 转为TensorFlow张量
    data_tensor = tf.convert_to_tensor(all_data_np)
    # 创建Tensor数据集
    dataset = tf.data.Dataset.from_tensor_slices(data_tensor)
    

优化建议

针对1970个文件的规模,可以用多进程加载提升速度:

from multiprocessing import Pool

def load_single_npy(path):
    return np.load(path)

# 用4个进程并行加载
with Pool(processes=4) as pool:
    all_data = pool.map(load_single_npy, path_list)
all_data_np = np.array(all_data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:57:16