如何用Python循环创建三维NumPy数组堆叠CSV训练数据?
解决三维数组堆叠问题
你的问题出在np.vstack的使用上——它会把每个(200,4)的二维数组按行拼接,最终把所有样本堆成一个大的二维数组。要得到(1000,200,4)的三维结构,最直接高效的方式是先把每个处理后的数组存入列表,最后一次性转换为三维数组,具体修改如下:
修改后的代码
import os import glob import numpy as np path = os.getcwd() csv_files = glob.glob(os.path.join(path, "*.csv")) # 初始化列表存储数据和标签 data_list = [] label_list = [] for f in csv_files: seperator = '_' app = os.path.basename(f).split(seperator, 1)[0] # 处理单个CSV并加入列表 processed_data = np.array(preprocess(f)) data_list.append(processed_data) label_list.append(app) # 转换为三维数组和标签数组 a = np.array(data_list) # 形状为(1000,200,4) b = np.array(label_list) print(a.shape) # 输出 (1000, 200, 4) print(b)
关键说明
- 用列表
data_list收集每个(200,4)的数组,避免循环中频繁数组拼接的性能损耗(每次vstack都会重新分配内存)。 - 最后调用
np.array(data_list)时,NumPy会自动将列表中的二维数组堆叠成三维数组,第一个维度对应CSV文件的数量,正好满足你通过a[0]到a[999]访问单个CSV数据的需求。 - 标签部分同样用列表收集后转数组,比循环中多次
np.append更高效。
内容的提问来源于stack exchange,提问作者mangosrk
相关产品推荐
相关产品推荐

