如何无需循环一次性读取目录下所有.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
相关产品推荐
相关产品推荐

