在柱状图容器上操作Python

2024-06-02 06:32:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找到由np.histrogram函数生成的bin范围内值的中值。如何只选择bin范围内的值并对这些特定值进行操作?以下是我的数据示例和我正在尝试的操作:

x = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]

y值可以有任何类型的x值与其关联,例如:

^{pr2}$

所以,我试图找到第一个bin中129个值的中间值y,等等


Tags: 数据函数示例类型binnp个值pr2
3条回答

^{}和{a2}将与数据箱匹配。在这种情况下,后者更可取,因为它可以减少不必要的检查(可以安全地假设您的垃圾箱已分类)。在

如果您查看^{}(Notes部分)的文档,您会注意到右边的箱子都半开着(除了最后一个)。这意味着您可以执行以下操作:

x = np.abs(np.random.normal(loc=0.75, scale=0.75, size=10000))
h, b = np.histogram(x)
ind = np.searchsorted(b, x, side='right')

现在,ind包含每个数字的标签,指示它属于哪个bin。您可以计算中间值:

^{pr2}$

如果您能够对输入的数据进行排序,那么您的工作就会变得更容易,因为您可以使用视图,而不是使用掩码为每个bin提取数据。^{}在这种情况下是一个不错的选择:

x.sort()
sections = np.split(x, np.cumsum(h[:-1]))
m = [np.median(arr) for arr in sections]

一种方法是使用pandas.cut()

>>> import pandas as pd
>>> import numpy as np
>>> np.random.seed(444)

>>> x = np.random.randint(0, 25, size=100)
>>> _, bins = np.histogram(x)
>>> pd.Series(x).groupby(pd.cut(x, bins)).median()
(0.0, 2.4]       2.0
(2.4, 4.8]       3.0
(4.8, 7.2]       6.0
(7.2, 9.6]       8.5
(9.6, 12.0]     10.5
(12.0, 14.4]    13.0
(14.4, 16.8]    15.5
(16.8, 19.2]    18.0
(19.2, 21.6]    20.5
(21.6, 24.0]    23.0
dtype: float64

如果你想留在NumPy,你可能想去看看np.digitize()。在

可以通过使用计数作为索引对已排序的数据进行切片来完成此操作:

x = np.random.rand(1000)
hist,bins = np.histogram(x)

ix = [0] + hist.cumsum().tolist()
# if don't mind sorting your original data, use x.sort() instead
xsorted = np.sort(x)
ix = [0] + hist.cumsum()
[np.median(x[i:j]) for i,j in zip(ix[:-1], ix[1:])]

它将作为一个标准的Python列表输出中间层。在

相关问题 更多 >