Shl*_*rtz 8 python statistics numpy histogram
以下数据代表 2 个给定的直方图,分为 13 个区间:
key 0 1-9 10-18 19-27 28-36 37-45 46-54 55-63 64-72 73-81 82-90 91-99 100
A 1.274580708 2.466224824 5.045757621 7.413716262 8.958855646 10.41325305 11.14150951 10.91949012 11.29095648 10.95054297 10.10976255 8.128781795 1.886568472
B 0 1.700493692 4.059243006 5.320899616 6.747120132 7.899067471 9.434997257 11.24520022 12.94569391 12.83598464 12.6165661 10.80636314 4.388370817
Run Code Online (Sandbox Code Playgroud)
我试图按照这篇文章来计算这两个直方图之间的交集,使用这种方法:
def histogram_intersection(h1, h2, bins):
bins = numpy.diff(bins)
sm = 0
for i in range(len(bins)):
sm += min(bins[i]*h1[i], bins[i]*h2[i])
return sm
Run Code Online (Sandbox Code Playgroud)
由于我的数据已经计算为直方图,因此我无法使用 numpy 内置函数,因此我无法为该函数提供必要的数据。
如何处理我的数据以适应算法?
由于您可以使用两个直方图的 bin 数量相同:
def histogram_intersection(h1, h2):
sm = 0
for i in range(13):
sm += min(h1[i], h2[i])
return sm
Run Code Online (Sandbox Code Playgroud)
首先需要注意一些:在您的数据箱中是范围,在您的算法中它们是数字。您必须为此重新定义垃圾箱。
此外,min(bins[i]*h1[i], bins[i]*h2[i])是bins[i]*min(h1[i], h2[i]),因此可以通过以下方式获得结果:
hists=pandas.read_clipboard(index_col=0) # your data
bins=arange(-4,112,9) # try for bins but edges are different here
mins=hists.min('rows')
intersection=dot(mins,bins)
Run Code Online (Sandbox Code Playgroud)