如何使用jq计算数组的中位数(P50)?jq手册描述了如何计算平均值,但我希望得到中位数。
算法:给定一个数字列表,对其进行排序。如果条目数为奇数,则选择中间的条目。如果有偶数个条目,则计算中间两个条目的平均值。
示例:
echo '[1,5,9,3]' | jq <ANSWER> # should output 4, since it's the mean of 3 and 5
echo '[1,9,2]' | jq <ANSWER> # should output 2, since it's the middle
我试图打印出平均值和中位数,但我不明白我在这里做错了什么,当我的列表是偶数时,我的代码不会打印出中位数。
def print_hi(name):
sum = 0
count =0
average = 0
list = []
list2 = []
while 1:
enter = float(input('Enter som numbers: '))
string = str(enter)
if enter == 0:
break
else:
numpy.argsort返回排序列表以执行间接排序,但它似乎不接受用户定义的函数来比较两个元素。
我想知道如何根据与用户定义函数的比较来获得排序列表。
就我而言,我有一个结果表:
a = [[1,2,3,5,6,7,8],[4,6,2,5,6,3,4],...]
我的比较功能是:
def argMedian(A):
s = np.array([sum(A[:i+1]) for i in range(Nmentions)])
mid = float(s[Nmentions-1])/2
return np.argwhere(mid < s)[0][0]
def
我查阅了类似的文章,人们贴出的例子对我造成了同样的错误,就像我自己的版本一样。我一直得到错误“列表索引必须是整数,而不是浮点数。”我相信我的逻辑背后的中位数是好的,但我不知道如何绕过这一点。我知道这是因为5/2 = 2.5,而这不是一个有效的指数,但在这种情况下,我该如何得到一个偶数列表的中位数呢?
我的简短代码是:
def median(lst):
lst.sort()
a = len(lst)
if a % 2 == 0:
b = lst[len(lst)/2]
c = lst[(len(lst)/2)-1]
d
我有一个数字列表,我想把它们分类到箱子里,并找出每个箱子的中位数。如果所有的bin都有相同数量的数据点,这将很容易使用numpy数组来相当有效地完成:
import numpy as np
indices=np.array([0,1,0,1,1,2,3,3,3,2,0,2])
length=np.max(indices)+1
data = np.arange(len(indices))
binned = np.array([data[indices == i] for i in range(length)])
然后,将入库数据(在数组binned中)
array([[ 0, 2, 1