IDL 的 HISTOGRAM 函数
原文链接:https://www.nv5geospatialsoftware.com/Learn/Blogs/Blog-Details/idls-histogram-function
18803 为本文评分:
3.2
IDL 的 HISTOGRAM 函数
匿名 2015年7月2日 星期四
IDL 的 HISTOGRAM 函数是我能想到的功能最多样的函数之一。对于许多常见任务,它可以非常快速和高效。
- 绘制直方图是研究数据统计特性的有效方法。概率密度图可以快速显示数据分布:
IDL> a = randomn(seed, 100000)+15.5+3*randomn(seed, 100000)
IDL> p = plot(location,histogram(a,nbins=1000,location=location),'r')

从直方图可以快速得出结论,适合 BYTSCL 的范围可能是 MIN=10.0,MAX=20.0。
- 可以通过在累积直方图中查找来以编程方式查找百分位数,例如,如果要在数据集中查找 5% 和 95% 的分位数:
IDL> a = randomn(seed, 100000)+15.5+3*randomn(seed, 100000)
IDL> location[value_locate(total(histogram(a,nbins=1000,location=location),/cumulative)/a.length,[0.05,0.95])]
10.285119 20.638901
这表明大约 90% 的值在 10.29 到 20.64 之间。
- 查找整数数组中出现频率最高的数字。
IDL> arr = [3,7,34,5,8,8,5,31,5,8]
IDL> location[where(histogram(arr) eq max(histogram(arr,location=location)))]
5 8
这表明数组中出现频率最高的值是 5 和 8,两者数量相同。
- 也可以使用 HISTOGRAM 进行排序。例如,对二维数据进行网格排序并计算每个网格单元的 "F" 值平均值:
IDL> x = 45*randomu(seed, 100000)
IDL> y = 32*randomu(seed, 100000)
IDL> f = 5.5*randomn(seed, 100000) + 16
IDL> grid_index = floor(x + floor(y)*ceil(max(x)))
IDL> h = histogram(grid_index, min=0, binsize=1,reverse_indices=rev)
IDL> f_means = dblarr(ceil([max(x),max(y)]))
IDL> for i=0,h.length-1 do if h[i] gt 0 then f_means[i] = mean(f[rev[rev[i]:rev[i+1]-1]])
使用较慢的 "WHERE" 方法检查其中一个值:
IDL> f_means[6,8]
15.784905433654785
IDL> mean(f[where(floor(x) eq 6 and floor(y) eq 8)])
15.784905