python – 熊猫:在最大距离内找到点
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 熊猫:在最大距离内找到点,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2210字,纯文字阅读大概需要4分钟。
内容图文
![python – 熊猫:在最大距离内找到点](/upload/InfoBanner/zyjiaocheng/745/c6364cc626cb43bcbabe83f82f3ee665.jpg)
我试图在彼此的最大距离内找到成对的(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, high, num)
y = random.uniform(low, high, 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)
>首先,它并不总能找到合适的对(我看到在指定距离内没有标记的点).
>如果我写剧情(……,’或’),它会突出显示所有点.这意味着pt_nbrz = points [((x_0-points.x)** 2(y_0-points.y)** 2)< max_d ** 2]至少返回一个(x,y).为什么?如果比较为False,它不应该返回一个空数组吗?
>如何在熊猫中更优雅地完成上述所有操作?例如,无需遍历每个元素.
解决方法:
您正在寻找的功能包含在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,0], points[close_points,1],
marker='o', mfc='none', 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)[:,0], (circle+poi)[:,1], 'k:') # Add a visual check for that distance
plt.show()
内容总结
以上是互联网集市为您收集整理的python – 熊猫:在最大距离内找到点全部内容,希望文章能够帮你解决python – 熊猫:在最大距离内找到点所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。