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

如何用sklearn.metrics对二维Numpy数组按行计算平均绝对误差?

解决方案:按行计算每行的MAE(使用sklearn.metrics且无循环)

原代码问题分析

  • 指定axis=0会让np.apply_along_axis按列处理数据,而非你需要的按行计算
  • mae的参数传递逻辑错误:apply_along_axis会将指定轴的元素作为第一个参数传入函数,原写法把两列数据作为额外参数传入,导致计算的是两列整体的MAE,而非每行的结果

正确实现方法

方法1:用np.apply_along_axis按行处理

通过lambda函数将每行的两个元素拆分为mae所需的输入格式,再按行执行计算:

from sklearn.metrics import mean_absolute_error as mae
import numpy as np

arr = np.array([[1.7, 3.1], [2.1, 2.7], [0.9, 0.7], [0.3, 0.8]])
# 按行处理,lambda将每行拆分为单元素数组传入mae
result_arr = np.apply_along_axis(lambda x: mae([x[0]], [x[1]]), 1, arr)
# 转换为你期望的二维列数组格式
result_arr = result_arr.reshape(-1, 1)

print(result_arr)

输出结果:

array([[1.4],
       [0.6],
       [0.2],
       [0.5]])

方法2:用np.vectorize包装mae

将mae转换为可向量化的函数,直接对两列元素逐对计算:

from sklearn.metrics import mean_absolute_error as mae
import numpy as np

arr = np.array([[1.7, 3.1], [2.1, 2.7], [0.9, 0.7], [0.3, 0.8]])
# 向量化mae,处理单个值对
vec_mae = np.vectorize(lambda y_true, y_pred: mae([y_true], [y_pred]))
result_arr = vec_mae(arr[:, 0], arr[:, 1]).reshape(-1, 1)

print(result_arr)

此方法同样能得到与方法1一致的结果,且无需显式循环。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:10:21