我知道我可以使用numpy.histogram
或numpy.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实现了这个?如果不是,那么?