常用的方法是使用均值(mean 或
average), 即用數(shù)據(jù)和除以數(shù)據(jù)個(gè)數(shù):
# 如果沒有從__future__導(dǎo)入division,那就是不對(duì)的
def mean(x):
return sum(x) / len(x)
mean(num_friends) # 7.333333
如果你有兩個(gè)數(shù)據(jù)點(diǎn),均值就意味著兩點(diǎn)的中間點(diǎn)。隨著數(shù)據(jù)集中點(diǎn)數(shù)的增加,均值點(diǎn)會(huì)
移動(dòng),但它始終取決于每個(gè)點(diǎn)的取值。
我們常常也會(huì)用到中位數(shù)(median),它是指數(shù)據(jù)中間點(diǎn)的值(如果數(shù)據(jù)點(diǎn)的個(gè)數(shù)是奇
數(shù)), 或者中間兩個(gè)點(diǎn)的平均值(如果數(shù)據(jù)點(diǎn)的個(gè)數(shù)是偶數(shù))。
例如,如果在排序向量 x 上有五個(gè)數(shù)據(jù)點(diǎn),那么中位數(shù)就是 x[5 // 2] 或 x[2]。如果有六
個(gè)數(shù)據(jù)點(diǎn),則中位數(shù)是 x[2](第三個(gè)點(diǎn))與 x[3](第四個(gè)點(diǎn))的平均數(shù)。
注意——和均值不同——中位數(shù)并不依賴于每一個(gè)數(shù)據(jù)的值。例如,即便數(shù)據(jù)集中最大的
點(diǎn)變得更大(或最小的點(diǎn)變得更?。?中間的數(shù)據(jù)點(diǎn)都不會(huì)變,意味著中位數(shù)也不會(huì)變。
median 函數(shù)很可能比你想象的更復(fù)雜一些,主要是因?yàn)閿?shù)據(jù)集中數(shù)據(jù)個(gè)數(shù)奇偶性的不同:
def median(v):
"""finds the 'middle-most' value of v"""
n = len(v)
sorted_v = sorted(v)
midpoint = n // 2
if n % 2 == 1:
# 如果是奇數(shù),返回中間值
return sorted_v[midpoint]
else:
# 如果是偶數(shù),返回中間兩個(gè)值的均值
lo = midpoint - 1
hi = midpoint
return (sorted_v[lo] + sorted_v[hi]) / 2
median(num_friends) # 6.0








暫無(wú)數(shù)據(jù)