Python如何将列表分散元素合并为单个数组以查询最小值及对应索引
问题解决说明
错误原因
你当前的mean1变量在每次外层i循环中都会被覆盖为单个浮点数值,后续转成numpy数组也只有1个元素,之前循环生成的均值没有被保存下来,才会出现每次np.size(mean1)返回1的情况。此外你原来把求均值的逻辑写在了内层e循环中,每次新增一个MSE值就重复计算均值,也属于冗余逻辑。
修改方案
你需要提前在所有循环的外侧初始化一个列表,用来存储每轮i循环生成的均值,全部计算完成后再统一转成numpy数组即可,修改后的代码如下:
import numpy as np # 第一步:外层提前初始化存储所有均值的列表 all_means = [] for i in range(0,151): mse=[] for e in eval_indices: # 定义当前折的验证集 eval_set= z[e] # 生成训练集掩码,排除验证集索引 mask_eval = np.ones(z.shape[0], bool) mask_eval[e] = False # 按掩码提取训练集 train_set = z[mask_eval] # 计算回归系数w y=train_set[:,-1] x=train_set[:,:-1] I=np.identity(n=z.shape[1]-1, dtype=np.int8) w=np.linalg.inv((i*I)+(np.transpose(x)@x))@np.transpose(x)@y # 计算当前折的MSE eval_y=eval_set[:,-1] eval_x=eval_set[:,:-1] mse_tst=1/(2*len(eval_set))*(np.transpose(eval_y-(eval_x@w))@(eval_y-(eval_x@w))) mse.append(mse_tst) # 第二步:当前i对应的所有折验证完后,计算平均MSE并存入列表 current_mean = np.mean(mse) all_means.append(current_mean) # 第三步:所有循环结束后转成numpy数组 mean_array = np.array(all_means) # 此时打印的size就是151,符合预期 print(np.size(mean_array))
求最小值及对应索引
直接调用numpy内置方法即可:
min_value = np.min(mean_array) min_index = np.argmin(mean_array) print(f"最小值为{min_value},对应索引为{min_index}")
内容的提问来源于stack exchange,提问作者user14261785
相关产品推荐
相关产品推荐

