首页 > 解决方案 > 两个列表的矩阵相减和结果的绝对值添加到新列表

问题描述

所以我试图将一个列表的值减去另一个列表,然后将这些结果的绝对值放入一个新列表中。本质上它看起来像这样: [0,1]-[1,0]= abs([-1, 1]) = [1,1]

之后,我需要最终列表的平均值:mean([1,1])=1

所以总的来说我是:1.从另一个列表中减去一个列表的值 2.将减法结果的绝对值添加到新列表和 3.打印最终列表的平均值

lyst=[0,1]
pred=[1,0]
AE=[]
for x in pred:
    avgList = lyst - pred
    AE.append(avgList)
    avgAE=mean(AE)
print(avgAE)

现在我的结果是一个错误说明:TypeError: unsupported operand type(s) for -: 'list' and 'list'。发生这种情况是因为 lyst - pred 目前无法工作。

成绩需为: 1、最终名单的平均值

标签: python

解决方案


还有许多其他直接方法,但这是您自己代码的工作版本。您的方法中的问题是您正在对列表执行矢量化操作(差异)。这对于列表是不可能的。要么转换为 NumPy 数组,要么使用 for 循环获取单个元素。在这里,您遍历列表的长度,然后按元素取差值。然后将差异附加到列表中,然后在 for 循环之外,取sum并除以元素数以获得平均值。

lyst=[0,1]
pred=[1,0]
AE=[]
for i in range(len(pred)):
    AE.append(abs(lyst[i] - pred[i]))
avgAE=sum(AE)/len(AE)
print(avgAE)
# 1.0

矢量化方法(使用 NumPy)

请注意:这对于您的目的来说有点过头了,但我仍然认为您应该知道这一点。abs是获取绝对值。

import numpy as np

lyst=np.array([0,1])
pred=np.array([1,0])
AE= abs(lyst-pred) # Take the difference element wise in a vectorized fashion
avgAE=np.average(AE)
print(avgAE)
# 1.0

推荐阅读