簡體   English   中英

需要幫助改進此 Python function 以確定平均絕對偏差 (MAD)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM