生成每个包含偶数个样本的区域

时间:2015-07-17 15:35:21

标签: python arrays numpy binning

我知道我可以使用numpy.histogramnumpy.digitize为numpy生成数组,并且过去也有。但是,我需要进行的分析要求在每个bin中存在偶数个样本,其中数据不是均匀分布的。

假设我在数组A = numpy.random.random(1000)中有大致正态分布的数据。如何将这些数据(通过创建索引或查找定义每个bin的范围的值)以每种方法中包含偶数个样本的方式对其进行分区?

我知道这可以被视为优化问题,并且可以解决它,即:

import numpy as np
from scipy.optimize import fmin

def generate_even_bins(A, n):
    x0 = np.linspace(A.min(), A.max(), n)

    def bin_counts(x, A):
        if any(np.diff(x)) <= 0:
            return 1e6
        else:
            binned = np.digitize(A, x)
            return np.abs(np.diff(np.bincount(binned))).sum()

    return fmin(bin_counts, x0, args=(A,))

...但是有没有可用的东西,也许是numpy或scipy.stats实现了这个?如果不是,那么?

0 个答案:

没有答案