繁体   English   中英

在 3d numpy 数组中找到 k 个最近的邻居

Finding k nearest neighbors in 3d numpy array

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

所以我试图从示例网格中找到 pyvista numpy 数组中的 k 个最近邻居。 收到邻居后,我想在我的 3d 模型中实现一些增长的区域。

但不幸的是,我收到了一些奇怪的输出,您可以在下图中看到。 似乎我在KDTree实现上遗漏了一些东西。 我正在关注类似问题的答案: https : //stackoverflow.com/a/2486341/9812286

import numpy as np 
from sklearn.neighbors import KDTree

import pyvista as pv

from pyvista import examples

# Example dataset with normals
mesh = examples.load_random_hills()

smooth = mesh

NDIM = 3
X = smooth.points
point = X[5000]

tree = KDTree(X, leaf_size=X.shape[0]+1)
# ind = tree.query_radius([point], r=10) # indices of neighbors within distance 0.3
distances, ind = tree.query([point], k=1000)

p = pv.Plotter()
p.add_mesh(smooth)

ids = np.arange(smooth.n_points)[ind[0]]
top = smooth.extract_cells(ids)
random_color = np.random.random(3)
p.add_mesh(top, color=random_color)

p.show()

具有不同颜色的两个细长斑块的表面的 3d 绘图

1 个回复

你快到了 :) 问题是你使用网格中的来构建树,然后提取单元格 当然,这些是无关的,因为点的索引在用作单元格索引时会给您带来废话。

要么你必须extract_points

import numpy as np 
from sklearn.neighbors import KDTree

import pyvista as pv

from pyvista import examples

# Example dataset with normals
mesh = examples.load_random_hills()

smooth = mesh

NDIM = 3
X = smooth.points
point = X[5000]

tree = KDTree(X, leaf_size=X.shape[0]+1)
# ind = tree.query_radius([point], r=10) # indices of neighbors within distance 0.3
distances, ind = tree.query([point], k=1000)

p = pv.Plotter()
p.add_mesh(smooth)

ids = np.arange(smooth.n_points)[ind[0]]
top = smooth.extract_points(ids)  # changed here!
random_color = np.random.random(3)
p.add_mesh(top, color=random_color)

p.show()

绘制在靠近边缘的圆形区域着色

或者您必须首先与细胞中心合作:

import numpy as np 
from sklearn.neighbors import KDTree

import pyvista as pv

from pyvista import examples

# Example dataset with normals
mesh = examples.load_random_hills()

smooth = mesh

NDIM = 3
X = smooth.cell_centers().points  # changed here!
point = X[5000]

tree = KDTree(X, leaf_size=X.shape[0]+1)
# ind = tree.query_radius([point], r=10) # indices of neighbors within distance 0.3
distances, ind = tree.query([point], k=1000)

p = pv.Plotter()
p.add_mesh(smooth)

ids = np.arange(smooth.n_points)[ind[0]]
top = smooth.extract_cells(ids)
random_color = np.random.random(3)
p.add_mesh(top, color=random_color)

p.show()

中间某处带有圆形区域的图形

如您所见,这两个结果不同,因为索引 5000(我们用于参考点)在索引点或索引单元格时意味着其他内容。

1 找到给定向量的k-最近邻居?

鉴于我的知识库中有以下内容: 我希望能够找到以下向量的最近邻居: 根据距离度量。 所以在这种情况下,给定一个特定的阈值,我应该发现列出的第一个向量是给定向量的近邻。 目前,我的知识数据库的大小大约为数百万,因此计算每个点的距离度量,然后进行比较证明是昂贵的。 对于如何以显着 ...

3 使用numpy数组创建最近邻居的列表

基于截止距离,我想创建一个点列表,这些点是给定点的邻居。 我被困在如何将点的ID添加到numpy数组中。 我在numpy数组中读取了“坐标”,如下所示: 等等... 我想要这样的输出列表 因此每个位置(1、2、3、4 ...等等)最多可以有5个邻居,如果少于5个,我 ...

5 寻找2D阵列的邻居

我有一个75格×75格的2D网格,我在用户点击时绘制了2种颜色(红色和蓝色)的符号,它工作正常,但我遇到了一个主要问题,我想找到这些符号的邻居:示例当用户点击一个单元格时,它会打印一个符号(椭圆形),现在我想要点击它还检查其邻居是否被占用或空,如果被占用,则由哪个符号。 我发现下面的算法似 ...

6 sklearn k 最近邻的问题

我想知道是否有一种方法可以强制 sklearn NearestNeighbors 算法,以在存在重复点时考虑输入数组中点的顺序。 为了显示: 因为查询集与训练集匹配,所以每个点的最近邻是点本身,距离为零。 但是,如果我允许 X 中的重复点,则可以理解,该算法不会区分重复项: 理想情况下,我 ...

7 在二维数组中寻找邻居(不包括对角线)

在另一篇文章中,我发现这种方法可以在二维数组中找到当前像素的邻居。 该解决方案将对角线像素视为邻居。 我需要一个仅直接给出 N、S、E、W 的解决方案。我如何才能将其实现到此代码中? 我提到的帖子在这里找到: 在二维数组中查找有效邻居感谢任何输入/帮助。 ...

8 寻找最近的邻居查询优化

有两个(简化的)表: 属性: POI(兴趣点): 所需结果: 以下查询工作正常,但速度非常慢(随着LIMIT增加,算术级数会变慢): 有什么更好(更快)的方法来达到预期的结果? ...

10 如何通过在2类数据集中找到少数类的k个最近多数邻居来创建新类

我正在尝试执行以下图像在R中显示的内容: 给定两个类别,其中“-”为多数,“ +”为少数,找到每个+的k个最近多数/“-”邻居,并将聚类转换为新的第二类(*)。 这样做的目的是综合平衡数据以进行更好的分类。 我过去曾使用过KNN,但从未喜欢过这样仅选择一个不同的变量。 编辑:样本输入和输出 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM