10

我正在尝试对numpy数组中的值进行排序,以便可以存储一定范围内的所有值(这可能会更好)。无论如何,我会举一个我正在尝试做的例子。我有一个名为 bins 的数组,如下所示:

bins = array([11,11.5,12,12.5,13,13.5,14])

我还有另一个名为 avgs 的数组:

avgs = array([11.02, 13.67, 11.78, 12.34, 13.24, 12.98, 11.3, 12.56, 13.95, 13.56,
              11.64, 12.45, 13.23, 13.64, 12.46, 11.01, 11.87, 12.34, 13,87, 13.04,
              12.49, 12.5])

我想要做的是找到在avgs数组值之间的范围内的数组索引值bins。例如,我试图创建一个 while 循环,为每个 bin 创建新变量。第一个 bin 是介于两者之间的所有内容,bins[0] and bins[1]看起来像:

bin1 = array([0, 6, 15])

这些索引值将对应于 中的值 11.02、11.3 和 11.01,avgs并且avgs是介于 中的索引值 0 和 1 之间的值bins。我还需要其他垃圾箱,所以另一个例子是:

bin2 = array([2, 10, 16])

然而,这对我来说具有挑战性的部分是基于其他参数的大小binsavgs变化,所以我试图构建一些能够扩展到更大或更小binsavgs数组的东西。

4

1 回答 1

14

Numpy 有一些非常强大的 bin 计数功能。

>>> binplace = np.digitize(avgs, bins) #Returns which bin an average belongs
>>> binplace
array([1, 6, 2, 3, 5, 4, 1, 4, 6, 6, 2, 3, 5, 6, 3, 1, 2, 3, 5, 7, 5, 3, 4])

>>> np.where(binplace == 1)
(array([ 0,  6, 15]),)
>>> np.where(binplace == 2)
(array([ 2, 10, 16]),)

>>> avgs[np.where(binplace == 1)]
array([ 11.02,  11.3 ,  11.01])
于 2013-07-01T21:18:37.460 回答