使用 Python 计算中位数
2021-12-02 by dongnan
开始之前
中位数是一个可将数值集合划分为相等的上下两部分的一个数值,对于Python
列表而言:
- 如果列表内的元素个数是奇数,则列表中间的那个元素就是列表的中位数。
- 如果列表内的元素个数是偶数,则列表中间的那两个元素的算术平均值就是列表的中位数。
环境描述
Python 版本为 3.6
,创建了两个列表,并对列表进行了排序:
列表1
长度为偶数
>>> list1 = sorted([float(d.close_value) for d in Indexes.query.get(1).data])
>>> list1_size = len(list1)
>>> list1_size
4144
列表2
长度为奇数
>>> list2 = sorted([float(d.close_value) for d in Indexes.query.get(7).data])
>>> list2_size = len(list2)
>>> list2_size
2687
计算中位数
列表1中位数
列表1的长度为偶数,需要计算中间那两个元素的算术平均值:
>>> (list1[list1_size//2] + list1[list1_size//2-1]) // 2
4556.0
列表2中位数
列表2的长度为奇数,直接使用中间的那个元素:
>>> list2[(list2_size-1)//2]
1451.3038
按位取反运算符
~
按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。
列表3有6个元素,即长度为偶数:
>>> list3 = list(range(1,7))
>>> list3
[1, 2, 3, 4, 5, 6]
中位数为元素3
和元素4
算数平均值。
元素3的索引位置为2:
>>> list3[2]
3
元素4的索引位置为3:
>>> list3[3]
4
利用取反符号,可以巧妙(任意一个元素)的获得两个相连的元素值:
>>> list3[3]
4
>>> list3[~3]
3
列表3的中位数
>>> (list3[3] + list3[~3]) / 2
3.5
列表1和列表2的中位数
按照取反符号方式再次计算计算列表1和列表2的中位数:
>>> mid1 = (list1_size // 2)
>>> (list1[mid1] + list1[~mid1]) / 2
4556.878000000001
>>> (list2[mid2] + list2[~mid2]) / 2
1451.3038