[英]Need help improving this Python function for determining Mean Absolute Deviation (MAD)
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 function 來確定平均絕對偏差(MAD),並希望獲得一些關於如何增強此代碼的建議。 它目前僅限於四個值,如上所示,但我希望能夠讓 function 攝取任意數量的值。 提前致謝。
您的代碼中計算平均絕對偏差的方式(公式)是錯誤的。 您應該計算所有絕對偏差,將它們相加並除以 list_of_sums 中的元素數量,而不是均值。 如果您的意思是純 python 不使用任何庫,則此代碼將執行此操作。
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)
您可以使用列表推導並以更少的行數編寫代碼。 但它會創建另一個列表,這將花費空間來存儲它,因此沒有優化。
否則,您可以使用 numpy、scipy 或 pandas 並且它們具有計算 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)
這循環遍歷列表並一次總結絕對偏差,然后進行瘋狂計算。
在優化解決方案方面, pandas對此有方法。
mad_in = [1,2,3,4...]
mad_out = pandas.Series(mad_in).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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.