- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一般问题
首先让我们更一般地解释这个问题。我有一组具有 x,y 坐标的点,并希望找到最佳的唯一邻居对,以使所有对中的邻居之间的距离最小化,但点不能用于多于一对。
一些简单的例子
注意:点不是有序的,x 和 y 坐标都在 0 到 1000 之间变化,但为了简单起见,在下面的例子中 x==y 和项目是有序的。
首先,假设我有以下点矩阵:
matrix1 = np.array([[1, 1],[2, 2],[5, 5],[6, 6]])
对于这个数据集,输出应该是
[0,0,1,1]
因为点 1 和 2 彼此最接近,而点 3 和 4 彼此最接近,因此提供了对 0 和 2。
matrix2 = np.array([[1, 1],[2, 2],[4, 4],[6, 6]])
这里 pt1 和 pt3 最接近 pt2,但 pt1 相对更近,所以输出应该又是
[0,0,1,1]
.
matrix3 = np.array([[1, 1],[2, 2],[3, 3],[4, 4]])
现在 pt1 和 pt3 再次与 pt2 最接近,但现在它们的距离相同。现在输出应该再次是
[0,0,1,1]
因为 pt4 最接近 pt3。
matrix4 = np.array([[1, 1],[2, 2],[4,4]])
应该给出输出
[0,0,nan]
第五,在三个或更多点的距离完全相同的情况下,配对可以是随机的,例如
matrix5 = np.array([[1, 1],[2, 2],[3, 3]])
'[0,0,nan]
and
的输出[nan,0,0]` 应该没问题。
import numpy as np
from sklearn.neighbors import NearestNeighbors
data = matrix3
nbrs = NearestNeighbors(n_neighbors=len(data), algorithm="ball_tree")
nbrs = nbrs.fit(data)
distances,indices = nbrs.kneighbors(data)
这输出实例:
array([[0, 1, 2, 3],
[1, 2, 0, 3],
[2, 1, 3, 0],
[3, 2, 1, 0]]))
第二列提供最近的点:
nearinds = `indices[:,1]`
接下来,如果列表中有重复项,我们需要找到最近的距离:
if len(set(nearinds) != len(nearinds):
dupvals = [i for i in set(nearinds) if list(nearinds).count(i) > 1]
for dupval in dupvals:
dupinds = [i for i,j in enumerate(nearinds) if j == dupval]
dupdists = distances[dupinds,1]
使用这些 dupdists,我将能够发现一个比另一个更接近 pt:
if len(set(dupdists))==len(dupdists):
duppriority = np.argsort(dupdists)
使用
duppriority
我们可以提供更接近 pt 的正确配对的值。但是给另一个点它的配对将取决于它的第二个最近的配对以及所有其他点到同一点的距离..此外,如果两个点到它们最近点的距离相同,我也需要去一个更深一层:
if len(set(dupdists))!=len(dupdists):
dupdists2 = [distances[i,2] for i,j in enumerate(inds) if j == dupval]```
if len(set(dupdists2))==len(dupdists2):
duppriority2 = np.argsort(dupdists2)
等等..
from scipy.spatial import cKDTree
distances,indices = cKDTree(matrix3).query(matrix3, k=len(matrix3))
所以我想知道一个是否会更好地继续与另一个。
prevdat = {'loc': [(300, 200), (425, 400), (400, 300)], 'contid': [0, 1, 2]}
currlocs = [(435, 390), (405, 295), (290, 215),(440,330)]`
时间上的点通常更接近自己而不是他人。因此,我应该能够随着时间的推移将点的身份联系起来。然而,有许多复杂的问题需要克服:
最佳答案
这可以表述为混合整数线性规划问题。
在 python 中,您可以使用 cvxpy 建模和解决此类问题。 .
def connect_point_cloud(points):
'''
Given a set of points computes return pairs of points that
whose added distance is minimised
'''
N = points.shape[0];
I, J = np.indices((N, N))
d = np.sqrt(sum((points[I, i] - points[J, i])**2 for i in range(points.shape[1])));
use = cvxpy.Variable((N, N), integer=True)
# each entry use[i,j] indicates that the point i is connected to point j
# each pair may count 0 or 1 times
constraints = [use >= 0, use <= 1];
# point i must be used in at most one connection
constraints += [sum(use[i,:]) + sum(use[:, i]) <= 1 for i in range(N)]
# at least floor(N/2) connections must be presented
constraints += [sum(use[i,j] for i in range(N) for j in range(N)) >= N//2];
# let the solver to handle the problem
P = cvxpy.Problem(cvxpy.Minimize(sum(use[i,j] * d[i,j] for i in range(N) for j in range(N))), constraints)
dist = P.solve()
return use.value
这是一段代码来可视化二维问题的结果
# create a random set with 50 points
p = np.random.rand(50, 2)
# find the pairs to with minimum distance
pairs = connect_point_cloud(p)
# plot all the points with circles
plt.plot(p[:, 0], p[:, 1], 'o')
# plot lines connecting the points
for i1, i2 in zip(*np.nonzero(pairs)):
plt.plot([p[i1,0], p[i2,0]], [p[i1,1], p[i2,1]])
关于python - 根据最近距离找到最佳的唯一邻居对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67368093/
我从 SpatialPolygonsDataFrame 开始,它包含用于创建加纳各地区 map 的数据(可在 http://www.diva-gis.org/datadown 获取)。我正在尝试创建一
我遇到了一个问题,我需要根据存储在前一个元素中的信息修改容器的元素。示例: 如果前一个 vector 元素可被 2 整除,则将当前元素乘以 10 vector -> [12, 11, 33, 10]
总的来说,我对脚本编写还很陌生。我正在编写一个 expect 脚本,它通过 ssh 进入 Cisco 交换机,并运行“show cdp neighbors”命令来获取连接到交换机的所有设备的列表。然后
我正在尝试比较节点的值。使用 flood-fill 算法,我能够垂直和水平检查网格的每个节点。现在我必须更新我的代码以检查位于对 Angular 线上的单元格,如下图所示: 红色是当前节点,黄色是需要
我使用预先计算的指标使用 Scikit-Learn 的最近邻/半径分类。这意味着,我将成对距离的 n_samples_train x n_samples_train 矩阵传递给分类器的拟合方法。 现在
我有一个大的稀疏图,我将其表示为邻接矩阵(100k x 100k 或更大),存储为边数组。具有(非稀疏)4 x 4 矩阵的示例: 0 7 4 0 example_array = [ [7,1,2],
从有向图中并给出两个顶点 (v, u) 我需要找到:共同的“出”邻居和共同的“入”邻居。 例如: import networkx as nx ghybrid = nx.DiGraph() ghybri
我正在使用 JavaScript 进行图像处理,我想知道是否有任何通用公式可以确定像素的 x 邻居。 我知道对于 3*3 的正方形,可以使用特定的 x 和 y 像素确定 8 个邻居。 (x-1,y-1
在 CentOS 6.4(内核 2.6.32)上,为什么下面的第二个 arping 调用会创建一个新的 ARP 表条目,而第一个不会?网络行为是相同的,我感到困惑的是,在我看来,系统调用实际上是等同的
我是一名优秀的程序员,十分优秀!