繁体   English   中英

如何在具有偶数个整数的 numpy 掩码数组中获得单个中位数

[英]How to get single median in numpy masked array with even number of entires

我有一个 numpy 掩码 nd 数组。 我需要找到沿特定轴的中位数。 在某些情况下,我最终拥有偶数个元素,在这种情况下numpy.ma.median给出中间两个元素的平均值。 但是,我不想要平均值。 我想要中间元素之一。 两者中的任何一个都可以。 我怎么得到这个?

MWE:

>>> import numpy
>>> data=numpy.arange(-5,10).reshape(3,5)
>>> mdata=numpy.ma.masked_where(data<=0,data)
>>> numpy.ma.median(mdata, axis=0)
masked_array(data=[5.0, 3.5, 4.5, 5.5, 6.5],
             mask=[False, False, False, False, False],
       fill_value=1e+20)

如您所见,它正在求平均值( 16 )并提供小数值( 3.5 )。 我想要16任何一个。

对于偶数个元素,中位数返回两个中间数的平均值。 但是,如果您不想要平均值,只想要两个中间数字中的一个,您可以在调用中位数方法的同时从集合中删除一个元素,这将使集合长度为奇数,您将得到什么你想要,而不是平均值(虽然这不是找到中位数的正确方法

当您有偶数个元素时,预计会平均。 假设您有从 1 到 10 的元素数组。平均值预计为 5 和 6 的平均值,即 5.5。 如果你有从 1 到 11 的元素,那么中位数是 6。希望这能澄清

  • numpy.percentile(array, 50)给出中值。
  • numpy.percentile有一个选项来指定到nearest插值。
  • 但是,此功能在numpy.ma模块中不可用。
  • 这个答案中使用的技巧可以在这里使用。

这个想法是用nan填充无效值并使用numpy.nanpercentile()nearest插值。

>>> mdata1 = numpy.ma.filled(mdata.astype('float'), numpy.nan)
>>> numpy.nanpercentile(mdata1, 50, axis=0, interpolation='nearest')
array([5., 1., 2., 3., 4.])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM