为了账号安全,请及时绑定邮箱和手机立即绑定

对直方图箱进行操作 Python

对直方图箱进行操作 Python

拉莫斯之舞 2021-08-17 15:36:09
我试图在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 值与之关联,例如:hist, bins = np.histogram(x)hist = [129, 126, 94, 133, 179, 206, 142, 147, 90, 185] bins = [0.,         0.09999926, 0.19999853, 0.29999779, 0.39999706,        0.49999632, 0.59999559, 0.69999485, 0.79999412, 0.8999933,        0.99999265]所以,我试图在生成的第一个 bin 中找到 129 个值的中值 y 值,等等。
查看完整描述

3 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

一种方法是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().


查看完整回答
反对 回复 2021-08-17
?
九州编程

TA贡献1785条经验 获得超4个赞

np.digitize并将np.searchsorted您的数据与垃圾箱匹配。在这种情况下,后者更可取,因为它会减少不必要的检查(可以安全地假设您的垃圾箱已排序)。


如果您查看np.histogram(注释部分)的文档,您会注意到右侧的垃圾箱都是半开的(最后一个除外)。这意味着您可以执行以下操作:


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。您可以计算中位数:


m = [np.median(x[ind == label]) for label in range(b.size - 1)]

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


x.sort()

sections = np.split(x, np.cumsum(h[:-1]))

m = [np.median(arr) for arr in sections]


查看完整回答
反对 回复 2021-08-17
?
SMILET

TA贡献1796条经验 获得超4个赞

您可以通过使用计数作为索引对数据的排序版本进行切片来实现此目的:


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 列表。


查看完整回答
反对 回复 2021-08-17
  • 3 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信