You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

改写Python核预测代码为列表推导式以支持任意数量数据点

Part3 正确实现方案

你之前的两种写法错误原因如下:

  • ynew = sum(w[i] * y[i]):缺少遍历索引的逻辑,sum仅接收了单个元素的计算值,无法完成所有对应位置的累加
  • ynew = (sum(val * y[i]) for val in w):把sum放在了生成器表达式内部,最终返回的是生成器对象而非累加后的数值结果

推荐实现(Python 风格写法)

使用zip()函数同时遍历权重列表w和标签列表y,配对对应位置的元素相乘后求和:

ynew = sum(weight * label for weight, label in zip(w, y))

如果你习惯用索引遍历,也可以写成以下形式:

ynew = sum(w[i] * y[i] for i in range(len(w)))

完整通用版函数参考

以下是适配任意长度数据集的完整代码,你可以直接参考使用:

import math

def foobar(data, x_new, h):
    x = data[0]
    y = data[1]
    
    # Part1:计算所有核函数值
    k = [math.e**(-(x_new - val)**2 / (2 * h)) for val in x]
    
    # Part2:通用权重计算(你说已解决,此处补全供参考)
    sum_k = sum(k)
    w = [kh / sum_k for kh in k]
    
    # Part3:加权求和得到预测结果
    ynew = sum(weight * label for weight, label in zip(w, y))
    
    return ynew

该版本无需修改即可支持任意长度的输入数据集,仅需保证输入数据中特征列表x和标签列表y的长度一致即可。


内容的提问来源于stack exchange,提问作者ashnotallyson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:36:06