如何识别值列表的较低和较高中间值邻居

2024-05-14 20:16:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下价值清单:

 my_vals_sorted =    
 [0.04701098816483717,
 0.047837747941765346,
 0.048203210075420284,
 0.050858702201435485,
 0.05517778062513831, # lower median neighbor
 0.06254807568026952, # higher median neighbor
 0.08835915310130199,
 0.09745027658063653,
 0.10855616681703671,
 0.3939978988121587]

它有中位数:

  import numpy as np
  np.median(my_vals_sorted)
  #0.058862928152703914

如上所述,我想确定较低和较高的中位数邻居。屈服

0.05517778062513831, # lower median neighbor
0.06254807568026952, # higher median neighbor

我该怎么做?你知道吗


Tags: importnumpymyasnplowermediansorted
2条回答

因为Python3.4有一个^{}模块:

import statistics
statistics.median_low(my_vals_sorted)
statistics.median_high(my_vals_sorted)

median_lowmedian_high可以处理未排序的数据(将首先对它们排序)。如果数据已经被排序了(如变量名所示),或者如果您使用的是早期的python,那么您可能会比复制statisticssource做得更糟。下面的代码主要是从那里复制过来的,并进行了一些修改(删除排序,用generic ValueError替换StatisticsError):

def median_low(data):
    n = len(data)
    if n == 0:
        raise ValueError("no median for empty data")
    if n % 2 == 1:
        return data[n//2]
    else:
        return data[n//2 - 1]


def median_high(data):
    n = len(data)
    if n == 0:
        raise ValueError("no median for empty data")
    return data[n//2]

我想你可以用常规的索引,比如

my_vals_sorted[int(len(my_vals_sorted)/2)]
my_vals_sorted[int(len(my_vals_sorted)/2 + 1)]

相关问题 更多 >

    热门问题