Chinaunix
标题:
Python求中位数
[打印本页]
作者:
瑞安3980
时间:
2015-01-08 10:23
标题:
Python求中位数
[[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16],
[17,18,19,20]]这组列表怎么求内置列表每列的中位数,注意是求1,5,9,13,17和2,6,10,14,18等列的中位数,怎么求其中位数?
作者:
gxyzwangyi
时间:
2015-01-08 23:41
本人新手,随手写了一段不那么pythonic的代码,不过结果应该是对的
a=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]]
b=[[] for i in range(len(a[0]))]
for i in range(len(a[0])):
for j in range(len(a)):
b[i].append(a[j][i])
for i in range(len(b)):
b[i]=sorted(b[i])[int(len(b[i])/2)]
复制代码
作者:
icymirror
时间:
2015-01-09 09:06
回复
1#
瑞安3980
给写了段code,你以后可以只更换传入的函数来对于list in list的数值的计算了。
比如:你自己再写个stdev等等。
# do not apply to empty list, it will result exception
mean = lambda x: sum(x) * 1.0 / len(x)
median = lambda x: sorted(x)[len(x) / 2] if len(x) % 2 == 1 else (sorted(x)[len(x) / 2 - 1] + sorted(x)[len(x) / 2]) / 2.0
def MatrixCalc(data, function, byRow=True):
"""
"""
if byRow: # By Column
return map(function, data)
else: # By Column
return map(function, map(list, zip(*data)))
def main():
data = [[1, 2, 3, 10], [2, 3, 4, 5], [3, 3, 9, 100]]
print MatrixCalc(data, mean, True)
print MatrixCalc(data, median, True)
print MatrixCalc(data, mean, False)
print MatrixCalc(data, median, False)
if __name__ == "__main__":
main()
复制代码
作者:
inpool
时间:
2015-01-09 11:33
本帖最后由 inpool 于 2015-01-09 11:34 编辑
a=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]]
def zhong(list_):
result = []
for i in zip(*list_):
nums = sorted(i)
length = len(x)/2
if len(x) % 2 == 0:
result.append(sum(nums[length-1:length+1]) / 2.0)
else:
result.append(nums[length])
return result
print zhong(a)
复制代码
作者:
tianzhizhengdao
时间:
2015-01-17 00:22
本帖最后由 tianzhizhengdao 于 2015-01-17 00:58 编辑
import numpy as np
a = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]]
b = [values for sublist in a for values in sublist]
# Decent way to flat list
# import itertools
# b = list(itertools.chain.from_iterable(a))
# Simplest way
# b = sum(a, [])
median = [np.median(b[i::4]) for i in range(4)]
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2