多ROOT文件均衡拆分神经网络训练测试数据的数组合并问题
问题解决方案
核心问题解决:合并多文件训练/测试数据
你当前得到Input_Train形状为(2,)的原因是:将包含两个二维数组的列表直接转为numpy数组时,得到的是数组的数组,而非合并后的单二维数组。需要用numpy的拼接函数将所有子数组纵向合并。
修改代码片段
替换原代码中converting list to numpy array部分的代码:
# 替换原来的转换逻辑,用concatenate纵向拼接所有子数组 Input_Train = np.concatenate(Input_Train, axis=0) Input_Test = np.concatenate(Input_Test, axis=0) Output_Train = np.concatenate(Output_Train, axis=0) Output_Test = np.concatenate(Output_Test, axis=0)
或者用更直观的vstack(效果完全一致):
Input_Train = np.vstack(Input_Train) Input_Test = np.vstack(Input_Test) Output_Train = np.vstack(Output_Train) Output_Test = np.vstack(Output_Test)
处理后Input_Train的形状会变为(2831,6),符合你的需求。
额外代码修正点
- 初始化错误:原代码中
Input_Train []缺少等号,应修改为Input_Train = [] - 标签逻辑错误:原代码将标签的两个维度都设为
Ofp[i][0],导致标签变为[0,0]或[1,1],不符合你注释的分类规则。正确的标签生成逻辑如下:
output_Labels = np.zeros((input_features.shape[0], 2)) for i in range(input_features.shape[0]): if Ofp[i][0] == 0: # 第一个muon正确,对应[0,1] output_Labels[i] = [0, 1] else: # 第二个muon正确,对应[1,0] output_Labels[i] = [1, 0]
或者用更高效的向量化写法:
output_Labels = np.zeros((input_features.shape[0], 2)) output_Labels[Ofp.flatten() == 0, 1] = 1 output_Labels[Ofp.flatten() == 1, 0] = 1
内容的提问来源于stack exchange,提问作者LearnByDoing
相关产品推荐
相关产品推荐

