python – 熊猫:在最大距离内找到点
发布时间:2020-12-20 11:38:53 所属栏目:Python 来源:网络整理
导读:我试图在彼此的最大距离内找到成对的(x,y)点.我认为最简单的方法是生成一个DataFrame并逐个遍历每个点,计算在给定点(x_0,y_0)的距离r内是否存在坐标(x,y)的点.然后,将发现的对的总数除以2. %pylab inlineimport pandas as pddef find_nbrs(low,high,num,max_
我试图在彼此的最大距离内找到成对的(x,y)点.我认为最简单的方法是生成一个DataFrame并逐个遍历每个点,计算在给定点(x_0,y_0)的距离r内是否存在坐标(x,y)的点.然后,将发现的对的总数除以2.
%pylab inline import pandas as pd def find_nbrs(low,high,num,max_d): x = random.uniform(low,num) y = random.uniform(low,num) points = pd.DataFrame({'x':x,'y':y}) tot_nbrs = 0 for i in arange(len(points)): x_0 = points.x[i] y_0 = points.y[i] pt_nbrz = points[((x_0 - points.x)**2 + (y_0 - points.y)**2) < max_d**2] tot_nbrs += len(pt_nbrz) plot (pt_nbrz.x,pt_nbrz.y,'r-') plot (points.x,points.y,'b.') return tot_nbrs print find_nbrs(0,1,50,0.1) >首先,它并不总能找到合适的对(我看到在指定距离内没有标记的点). 解决方法
您正在寻找的功能包含在
scipy’s spatial distance module中.
这是一个如何使用它的例子.真正的魔力在于方形(pdist(points)). from scipy.spatial.distance import pdist,squareform import numpy as np import matplotlib.pyplot as plt points = np.random.uniform(-.5,.5,(1000,2)) # Compute the distance between each different pair of points in X with pdist. # Then,just for ease of working,convert to a typical symmetric distance matrix # with squareform. dists = squareform(pdist(points)) poi = points[4] # point of interest dist_min = .1 close_points = dists[4] < dist_min print("There are {} other points within a distance of {} from the point " "({:.3f},{:.3f})".format(close_points.sum() - 1,dist_min,*poi)) 距离点0.1(0.194,0.160)距其他27个点 出于可视化目的: f,ax = plt.subplots(subplot_kw= dict(aspect='equal',xlim=(-.5,.5),ylim=(-.5,.5))) ax.plot(points[:,0],points[:,1],'b+ ') ax.plot(poi[0],poi[1],ms=15,marker='s',mfc='none',mec='g') ax.plot(points[close_points,points[close_points,marker='o',mec='r',ls='') # draw all points within distance t = np.linspace(0,2*np.pi,512) circle = dist_min*np.vstack([np.cos(t),np.sin(t)]).T ax.plot((circle+poi)[:,(circle+poi)[:,'k:') # Add a visual check for that distance plt.show() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |