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),并希望得到一些关于如何增强该代码的建议。如上图所示,目前它被限制为四个值,但我希望能够让函数摄取任何数量的值。先谢谢你。
在你的代码中,计算平均绝对偏差的方式(公式)是错误的。你应该计算所有的绝对偏差,将它们相加,然后除以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。
在优化方案方面。大熊猫 有一个方法可以解决这个问题。
mad_in = [1,2,3,4...]
mad_out = pandas.Series(mad_in).mad()
xbar = mean(list_of_nums)
test=0
for num in list of nums:
test = test + abs(num - xbar)
mad = test/xbar
return int(mad)
这个方法可以在列表中循环,每次将绝对偏差相加,然后进行疯狂的计算。
这可以通过使用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