Ame*_*ina 5 python numpy matplotlib histogram python-3.x
考虑一个返回百分比的numpy数组的直方图计算:
# 500 random numbers between 0 and 10,000
values = np.random.uniform(0,10000,500)
# Histogram using e.g. 200 buckets
perc, edges = np.histogram(values, bins=200,
weights=np.zeros_like(values) + 100/values.size)
Run Code Online (Sandbox Code Playgroud)
以上返回两个数组:
perc包含%每对连续edges[ix]和edges[ix+1]总数中的值(即百分比).edges 长度 len(hist)+1现在,假设我想过滤perc,edges以便我最终 得到新范围内包含的值的百分比和边缘[m, M]."
即,我想与工作子阵列的perc和edges对应于中值的间隔[m, M].不用说,新的百分比数组仍然指的是输入数组的总分数.我们只想过滤perc并edges最终得到正确的子阵列.
我怎样才能后处理perc和edges这样做呢?
值的m和M可以是任何数量的课程.在上面的例子中,我们可以假设例如m = 0和M = 200.
m = 0; M = 200
mask = [(m < edges) & (edges < M)]
>>> edges[mask]
array([ 37.4789683 , 87.07491593, 136.67086357, 186.2668112 ])
Run Code Online (Sandbox Code Playgroud)
让我们处理一个较小的数据集,以便更容易理解:
np.random.seed(0)
values = np.random.uniform(0, 100, 10)
values.sort()
>>> values
array([ 38.34415188, 42.36547993, 43.75872113, 54.4883183 ,
54.88135039, 60.27633761, 64.58941131, 71.51893664,
89.17730008, 96.36627605])
# Histogram using e.g. 10 buckets
perc, edges = np.histogram(values, bins=10,
weights=np.zeros_like(values) + 100./values.size)
>>> perc
array([ 30., 0., 20., 10., 10., 10., 0., 0., 10., 10.])
>>> edges
array([ 38.34415188, 44.1463643 , 49.94857672, 55.75078913,
61.55300155, 67.35521397, 73.15742638, 78.9596388 ,
84.76185122, 90.56406363, 96.36627605])
m = 0; M = 50
mask = (m <= edges) & (edges < M)
>>> mask
array([ True, True, True, False, False, False, False, False, False,
False, False], dtype=bool)
>>> edges[mask]
array([ 38.34415188, 44.1463643 , 49.94857672])
>>> perc[mask[:-1]][:-1]
array([ 30., 0.])
m = 40; M = 60
mask = (m < edges) & (edges < M)
>>> edges[mask]
array([ 44.1463643 , 49.94857672, 55.75078913])
>>> perc[mask[:-1]][:-1]
array([ 0., 20.])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
574 次 |
| 最近记录: |