偶数整数掩模阵列中单中值的求法

2024-06-30 15:20:31 发布

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

我有一个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中的任何一个


Tags: importnumpyfalse元素data情况平均值median
3条回答

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

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

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

其思想是使用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.])

相关问题 更多 >