需要帮助改进这个Python函数来确定平均绝对偏差(MAD)。

问题描述 投票:0回答:1
def what_is_mad(list_of_nums):
    xbar = what_is_mean(list_of_nums)
    for num in list_of_nums:
        value1 = list_of_nums[0]
        value2 = list_of_nums[1]
        value3 = list_of_nums[2]
        value4 = list_of_nums[3]
        test = abs(value1 - xbar) + abs(value2 - xbar) + abs(value3 - xbar) + abs(value4 - xbar)
        mad = test / xbar
    return int(mad)

what_is_mad(2, 2, 4, 4)

我正在尝试建立我自己的纯Python函数,用于确定平均绝对偏差(MAD),并希望得到一些关于如何增强该代码的建议。如上图所示,目前它被限制为四个值,但我希望能够让函数摄取任何数量的值。先谢谢你。

python function
1个回答
1
投票

在你的代码中,计算平均绝对偏差的方式(公式)是错误的。你应该计算所有的绝对偏差,将它们相加,然后除以list_of_sums中的元素数,而不是平均值。如果你指的是不使用任何库的纯Python,那么这段代码就可以了,你可以使用list comprehension,然后再除以list_of_sums中的元素数,而不是平均值。

xbar = sum(list_of_nums)/len(list_of_nums)
dev = 0
for num in list_of_nums:
    dev = dev + abs(num - xbar)
mad = dev/len(list_of_nums)
print(mad)

你可以使用list comprehension,用较少的行数来写代码。但它会创建另一个列表,这将花费空间来存储它,因此不优化。

否则,你可以使用numpy、scipy或pandas,它们有内置的函数来计算MAD。


0
投票

在优化方案方面。大熊猫 有一个方法可以解决这个问题。

mad_in = [1,2,3,4...]

mad_out = pandas.Series(mad_in).mad()

0
投票
xbar = mean(list_of_nums)
test=0
for num in list of nums:
    test = test + abs(num - xbar)
mad = test/xbar
return int(mad)

这个方法可以在列表中循环,每次将绝对偏差相加,然后进行疯狂的计算。


0
投票

这可以通过使用python内置的 sum 操作和列表理解

def what_is_mad(*list_of_nums):
    count = len(list_of_nums)
    mean = sum(list_of_nums) / count
    mad = sum((abs(num - mean) for num in list_of_nums)) / count
    return mad
© www.soinside.com 2019 - 2024. All rights reserved.