因此,我尝试将一个列表的值与另一个列表相减,然后将这些结果的绝对值放入新列表中。本质上,它将看起来像这样: [0,1]-[1,0] = abs([-1,1])= [1,1]
之后,我需要最终列表的平均值: 平均值([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:--'list'和'list'不受支持的操作数类型。发生这种情况是因为lyst-pred目前无法使用。
结果必须为:1,最终列表的平均值
答案 0 :(得分:2)
还有许多其他直接方法,但这是您自己的代码的有效版本。方法中的问题是您正在对列表执行矢量化操作(差异)。使用列表是不可能的。您可以转换为NumPy数组,也可以使用for循环获取单个元素。在这里,您遍历列表的长度,然后采用差异 element-wise 。然后,将差值附加到列表中,然后在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
答案 1 :(得分:1)
如果不使用numpy
,我建议使用zip
进行列表理解:
lyst=[0,1]
pred=[1,0]
AE = [abs(x-y) for x,y in zip(lyst,pred)]
avgAE= sum(AE)/len(AE)
>>> AE
[1, 1]
>>> avgAE
1.0
说明
这是将两个列表压缩在一起:
>>> list(zip(lyst,pred))
[(0, 1), (1, 0)]
然后迭代并获得每个“组”(列表理解的abs(x-y)
部分)的减法的绝对值。