【问题标题】:Get the index of median value in array containing Nans获取包含 Nans 的数组中值的索引
【发布时间】:2015-04-05 14:43:57
【问题描述】:

如何获取包含 NaN 的数组的中值索引?

例如,我有一个值数组[Nan, 2, 5, NaN, 4, NaN, 3, 1],在这些值[np.nan, 0.1, 0.2, np.nan, 0.1, np.nan, 0.4, 0.3] 上有对应的错误数组。那么中位数是3,而误差是0.4

有没有简单的方法来做到这一点?

编辑:我编辑了错误数组以暗示更现实的情况。是的,我正在使用 numpy。

【问题讨论】:

  • 如果中位数有多个值,你想要什么,如[1,2,2,3]
  • @DSM,您是指中位数本身还是错误?中位数也是为偶数数组定义的。
  • @Py-ser:在您的标题和问题中,您指的是中值的 index,而不是中值。
  • @DSM,你是对的。但是,我解释了一个关于索引实际使用的清晰示例。我认为索引是获取错误数组索引的最佳方法。无论如何,在你提到的情况下,我想两个索引是必要的。
  • 这并不像您想象的那样明确定义一个问题。对于[1,2,3,4],中位数——2.5——不是数组的元素。你想返回什么索引? [2,2,2,3,3,3] 呢?你想返回每个索引吗?等等。

标签: python numpy nan median


【解决方案1】:

目前还不清楚您打算如何从中位数中有意义地提取误差,但如果您碰巧有一个数组,其中位数是其条目之一,并且相应的错误数组在相应的索引处定义,并且没有其他条目与中位数具有相同的值,并且可能还有其他几个免责声明,那么您可以执行以下操作:

a = np.array([np.nan,2,5,np.nan, 4,np.nan,3,1])
aerr = np.array([np.nan, 0.1, 0.2, np.nan, 0.1, np.nan, 0.4, 0.3])

# median, ignoring NaNs
amedian = np.median(a[np.isfinite(a)])
# find the index of the closest value to the median in a
idx = np.nanargmin(np.abs(a-amedian))
# this is the corresponding "error"
aerr[idx]

编辑:正如@DSM 指出的,如果你有 NumPy 1.9 或更高版本,你可以将amedian 的计算简化为amedian = np.nanmedian(a)

【讨论】:

  • 如果我们知道这就是 OP 所追求的,我们可以在现代的 numpy 中使用 np.nanmedian 来简化 amedian 行。
【解决方案2】:

numpy 有你需要的一切:

values = np.array([np.nan, 2, 5, np.nan, 4, np.nan, 3, 1])
errors = np.array([np.nan, 0.1, 0.2, np.nan, 0.1, np.nan, 0.4, 0.3])

# filter
filtered = values[~np.isnan(values)]
# find median
median = np.median(filtered)
# find indexes
indexes = np.where(values == median)[0]
# find errors
errors[indexes] # array([ 0.4])

【讨论】:

    【解决方案3】:

    假设您将列表命名为“a”,那么您可以使用此代码查找没有“Nan”的掩码数组,然后使用 np.ma.median() 计算中位数:

    a=[Nan, 2, 5, NaN, 4, NaN, 3, 1]
    am = numpy.ma.masked_array(a, [numpy.isnan(x) for x in a])
    numpy.ma.median(am)
    

    您也可以对错误执行相同的操作。

    【讨论】:

    • 我不确定这是否符合我的需要。
    • 这会忽略你的 Nan 值
    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    相关资源
    最近更新 更多