两个列表的矩阵减法,并将结果的绝对值添加到新列表

时间:2018-10-31 01:03:16

标签: python

因此,我尝试将一个列表的值与另一个列表相减,然后将这些结果的绝对值放入新列表中。本质上,它将看起来像这样: [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,最终列表的平均值

2 个答案:

答案 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)部分)的减法的绝对值。