我有一個學校專案,我們需要在 python 中計算串列的四分位數(串列應該能夠是偶數和非偶數串列)。我不允許使用 import (exept math.floor/math.ceil) 來讓事情變得更容易。我只是無法讓它作業,因為我有時會得到一個正負 0.5 的值。(所以如果我想要 3 作為示例,我會得到 2.5 或 3.5,具體取決于串列中數字的組合和數量)有什么建議嗎?
到目前為止,我的代碼如下所示:
def quartile_one(x):
x.sort()
k = 0
if (len(x)%2) == 0:
k = (math.floor((len(x) 1)*0.25))
return ((x[k - 1]) (x[k]))/2
else:
k = (math.floor((len(x) 1)*0.25))
return x[k - 1]
def quartile_three(x):
x.sort()
k = 0
if (len(x)%2) == 0:
k = (math.floor(len(x)*0.75))
return (((x[k - 1]) (x[k]))/2)
else:
k = (math.floor(len(x)*0.75))
return x[k - 1]
x = [1,2,3,4,5,6,7,8,9]
print(quartile_one(x))
print(quartile_three(x))
(預期輸出:2.5 和 7.5)
謝謝!
很抱歉有任何不好的語法。
uj5u.com熱心網友回復:
第一個和第三個四分位數的位置不取決于 N/2,它們取決于 N/4。這應該產生正確的數字。我附上了一張圖表,顯示了四分位點的位置:
import math
# 1 2 3 4 5 6
# ^ ^ ^
# 1 2 3 4 5 6 7
# ^ ^ ^
# 1 2 3 4 5 6 7 8
# ^ ^ ^
# 1 2 3 4 5 6 7 8 9
# ^ ^ ^
def quartile_one(x):
x.sort()
k = len(x) // 4
if len(x) % 4 < 2:
return (x[k-1] x[k])/2
else:
return x[k-1]
def quartile_three(x):
x.sort()
k = 3 * len(x) // 4
if len(x) % 4 < 2:
return (x[k] x[k 1])/2
else:
return x[k]
x = [1,2,3,4,5]
for z in (6,7,8,9):
x.append(z)
print(x)
print(quartile_one(x))
print(quartile_three(x))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/431624.html
