【问题标题】:Compute median for numpy histogram2d data计算 numpy histogram2d 数据的中位数
【发布时间】:2017-05-16 03:55:21
【问题描述】:

我有一些数据要放入 x 和 y 中。然后,我对 x bin 中的数据进行归一化,使得 xbin 中的所有数据总和为 1...所以我对每个 x 处的每个 y 值都有一个归一化的概率。

    nA, binsx, binsy = np.histogram2d(dataA,dataB,
                                      bins=[binsA,binsB],normed=False)

    H = np.ma.masked_where(nA==0.0, nA)
    for i in range(len(H[0,:])):     # Column index i, over len of row 0
        colTot = np.sum(H[:,i])
        for j in range(len(H[:,0])): # Row index j, over len of column 0
            H[j,i] = H[j,i]/colTot

此时 H 沿列归一化...每个总和为 1。

我的问题是,如何有效地生成每列的中值?我相信我需要为每列(或 xbin 中的一组值)生成一个新数组,其中 y 值的数量等于该 ybin 的原始 (nA) 计数。看起来很复杂...有没有更简单的方法?

这是我现在正在尝试的:

nA, binsx, binsy = np.histogram2d(dataA,dataB,
                                  bins=[binsA,binsB],normed=False)
for j in range(nA[0,:].size): # Loop over number of columns
    oneMass = np.array([])
    for i in range(nA[:,0].size): # loop over rows in y...
        tmp = np.repeat(binsA[i],np.int32(nA[i,j]))
        if  tmp.size > 0:
            oneMass = np.concatenate((oneMass,tmp) )

    print('Median',np.median(oneMass))

【问题讨论】:

  • 请提供一些测试数据,以便您的示例可以运行。

标签: python numpy median


【解决方案1】:

如果您已经对列进行了标准化,您可以在累积概率函数上进行线性插值到 0.5:

cumCols = np.cumsum(H, axis = 1)
medians = np.array([np.interp(.5, binsA, cumCols[:,i]) for i in range(len(binsA))])

【讨论】:

  • 谢谢!我认为这行得通...我已将每个 bin 中的值转换为归一化概率...所以这将返回中值概率值——但我想我必须使用我的方法或类似的方法来获得实际的每列的中值。
猜你喜欢
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 2019-06-08
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 2021-12-28
相关资源
最近更新 更多