如何用for循环创建嵌套列表实现网格搜索拟合预测值
网格搜索拟合直线:生成嵌套预测值列表的实现
需求回顾
给定数据集xdata、ydata,已生成包含所有待测试(m,b)对的网格grid,需要通过for循环迭代,为每个x值计算所有(m,b)对应的预测y值,最终得到嵌套列表结构(外层列表每个元素对应一个x的所有预测值,内层为该x下的结果集合)。
实现代码
首先定义已知数据与示例网格(若grid已生成可跳过网格生成部分):
xdata = [0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0] ydata = [1.2, 1.8, 1.7, 3.0, 3.5, 3.2, 4.5, 4.8, 5.3, 6.2] # 示例:生成m和b的网格(根据实际需求调整m、b的取值范围) import itertools m_candidates = [0.8, 1.0, 1.2, 1.4] # 可替换为你的m取值列表 b_candidates = [0.2, 0.4, 0.6, 0.8] # 可替换为你的b取值列表 grid = list(itertools.product(m_candidates, b_candidates))
接下来用嵌套for循环生成目标嵌套列表:
# 初始化存储结果的嵌套列表 predicted_y_list = [] # 遍历每个x值 for x in xdata: # 存储当前x对应的所有预测值 current_x_preds = [] # 遍历所有(m,b)对计算预测值 for m, b in grid: y_pred = m * x + b current_x_preds.append(y_pred) # 将当前x的预测值列表加入外层列表 predicted_y_list.append(current_x_preds)
结构说明
最终得到的predicted_y_list结构如下:
- 外层列表长度等于
xdata的长度(10个元素) - 每个外层元素是一个子列表,长度等于
grid中(m,b)对的数量,子列表内的元素是对应x值在不同(m,b)下的预测y值
补充:列表推导式简化写法
如果允许使用列表推导式(逻辑与循环完全一致),可以简化为一行:
predicted_y_list = [[m * x + b for m, b in grid] for x in xdata]
内容的提问来源于stack exchange,提问作者Edgar E Villegas
相关产品推荐
相关产品推荐

