2024-06-02 06:32:59 发布
网友
我试图找到由np.histrogram函数生成的bin范围内值的中值。如何只选择bin范围内的值并对这些特定值进行操作?以下是我的数据示例和我正在尝试的操作:
np.histrogram
x = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]
y值可以有任何类型的x值与其关联,例如:
所以,我试图找到第一个bin中129个值的中间值y,等等
^{}和{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。您可以计算中间值:
ind
如果您能够对输入的数据进行排序,那么您的工作就会变得更容易,因为您可以使用视图,而不是使用掩码为每个bin提取数据。^{}在这种情况下是一个不错的选择:
x.sort() sections = np.split(x, np.cumsum(h[:-1])) m = [np.median(arr) for arr in sections]
一种方法是使用pandas.cut():
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()。在
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列表输出中间层。在
^{} 和{a2}将与数据箱匹配。在这种情况下,后者更可取,因为它可以减少不必要的检查(可以安全地假设您的垃圾箱已分类)。在
如果您查看^{} (Notes部分)的文档,您会注意到右边的箱子都半开着(除了最后一个)。这意味着您可以执行以下操作:
现在,
^{pr2}$ind
包含每个数字的标签,指示它属于哪个bin。您可以计算中间值:如果您能够对输入的数据进行排序,那么您的工作就会变得更容易,因为您可以使用视图,而不是使用掩码为每个bin提取数据。^{} 在这种情况下是一个不错的选择:
一种方法是使用
pandas.cut()
:如果你想留在NumPy,你可能想去看看
np.digitize()
。在可以通过使用计数作为索引对已排序的数据进行切片来完成此操作:
它将作为一个标准的Python列表输出中间层。在
相关问题 更多 >
编程相关推荐