python - 如何将 numpy 数组中的值组织到包含特定范围值的容器中?

标签 python arrays numpy bins

我正在尝试对 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] 和 bins[1] 之间的所有内容,看起来像:

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

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

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

然而,这对我来说具有挑战性的部分是 binsavgs 的大小会根据其他参数发生变化,因此我试图构建一些能够扩展到更大或更小的 binsavgs 数组。

最佳答案

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])

关于python - 如何将 numpy 数组中的值组织到包含特定范围值的容器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17413624/

相关文章:

Python/Numpy 每第 n 行切片一个数组

python - 如何有效地检查许多条件并在正确的情况下分配不同的 id?

python - 如何检查复杂对象的哪些细节不能被 pickle

php - 将简单的php代码转换为python

Python 的 "StandardScaler"和 "LabelEncoder"以及 "fit"和 "fit_transform"不适用于同时包含 float 和字符串的 CSV

javascript - 创建集合结构的嵌套数组

python - 将带有二维数组列的 pandas 数据框保存为 python 中的 Parquet 文件

Python - 找到 2 个列表的补充

python - 如何使用 try 函数处理 python 中的特定整数异常。如何使用 try 函数处理多个 except

c# - 有没有办法让 Int 变量等于(==)数组中存储的所有数字?