沿线找到点的密度以找到具有最大浓度的区域

时间:2019-03-24 10:50:44

标签: python algorithm grouping distribution

邻居稠密的发现点

我有一组(count = 485)范围在0.015到0.13之间的值,并且具有六位数的精度。

我想在python中使用numpy。

我尝试过

b = []
with open('data.txt') as infile:
    lines = infile.readlines()
    for line in lines:
        for n in line.split()[2:3]:
            b.append(n)
xa = np.asarray(b,dtype=float)
print 'mode-',stats.mode(xa)

此处data.txt在第三列中具有值。 这给出了多次出现的价值。 就我而言,0.06出现了两次。 因此,以上代码不适用于我的情况。

如果在'x'处有一个峰,是否可以用图来解释点x具有最密集的邻域。

我无法定义'neigbourhood'。您可以自己决定。

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用matplotlib.pyplot.hist绘制直方图来显示峰。您也可以使用np.histogram()来返回相同的结果。编辑:我现在在直方图频率结果上使用np.argmax()来找到我们最大的窗口。还在直方图中绘制了一条线以显示最大频率。

您也可以检出numpy.genfromtxt()pandas.read_csv()以便于打开文件。

import matplotlib.pyplot as plt
import numpy as np
#Synthetic Data
dat=np.random.uniform(0.015,0.13,485)#(count=485) of values in range 0.015 to 0.13

binsize=20 #number of windows you want
hist=plt.hist(dat,bins=binsize) #Plot and get our histogram values
#hist=np.histogram(dat,bins=binsize) #will also work, just not plot the answer.

#hist[0] is frequencies and hist[1] is x value

ans=hist[1][np.argmax(hist[0])]
print('Answer: '+str(ans))

buffer=(hist[1][2]-hist[1][1])/2 #Just to centre the black line
plt.axvline(ans+buffer,c='k') #Draw a line of centre
plt.show()