理解 scipy.spatial.KDTree 中的 `leafsize`

2023-11-27

问题陈述:

我在 3D 空间中有 150k 个点,它们的坐标存储在尺寸为 [150k, 3](以毫米为单位)的矩阵中。

我想找到给定点的所有邻居p在半径范围内r。我想以最准确的方式做到这一点。

我应该如何选择我的leafsize范围 ?

from scipy.spatial import KDTree
import numpy as np

pts = np.random.rand(150000,3)

T1 = KDTree(pts, leafsize=20)
T2 = KDTree(pts, leafsize=1)

neighbors1= T1.query_ball_point((0.3,0.2,0.1), r=2.0)
neighbors2= T2.query_ball_point((0.3,0.2,0.1), r=2.0)

np.allclose(sorted(neighbors1), sorted(neighbors2))
True

功能query_ball_point将为任何版本的搜索树返回正确的点集。这leafsize参数不会影响查询的结果,只会影响结果的性能。

想象一下下面显示的两棵树具有相同的数据(但叶大小参数不同),并且查询搜索红色圆圈内的所有点。

Example Search Trees

在这两种情况下,代码只会返回位于红色圆圈内的两个点。这是通过检查与圆相交的树的所有框中的所有点来完成的。这会导致每种情况下的工作量不同(即不同的性能)。对于左边的树(对应于较大的叶子尺寸),算法必须检查 13 个点是否在圆内(6 个位于上部相交框中,7 个位于下部相交框中)。在右侧的树(叶子尺寸较小)中,仅处理三个点(一个位于上部相交框中,两个位于下部相交框中)。

按照这个逻辑,您可能认为始终使用较小的叶子尺寸是有意义的:这将最大限度地减少算法结束时的实际比较数量(确定点是否实际上位于查询区域中)。但事情并不是那么简单:较小的叶子尺寸将生成更深的树,从而增加构建时间和树遍历时间的成本。获得树遍历性能与叶级比较的正确平衡实际上取决于进入树的数据类型以及您正在执行的特定叶级比较。这就是为什么 scipy 提供 leafsize 参数作为参数,以便您可以调整事物以在特定算法上获得最佳性能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

理解 scipy.spatial.KDTree 中的 `leafsize` 的相关文章

  • 如何用Python实现FIR高通滤波器?

    首先 我在 Stack Exchange 中问了这个问题 我只得到与概念相关的答案 而不是面向实现的答案 所以 我的问题是我正在尝试创建高通滤波器并使用 Python 实现 from numpy import cos sin pi abso
  • Scipy 最小化 fmin - 语法问题

    我有一个函数 它接受多个参数 一个数组和两个浮点数 并返回一个标量 浮点数 现在我想通过改变两个参数来最小化这个函数 两个浮点数 该数组在函数内部 解包 然后使用其内容 数组和浮点数 如何使用 SciPy 的 fmin 函数来完成此操作 我
  • 在 Python 中对数据进行求和

    Given that the fitting function is of type 我打算将这样的函数拟合到我拥有的实验数据 x y f x 中 但后来我有一些疑问 当涉及求和时 如何定义拟合函数 一旦定义了函数 即def func re
  • 使用sklearn进行多标签特征选择

    我希望使用 sklearn 对多标签数据集执行特征选择 我想要获得最终的功能集across标签 然后我将在另一个机器学习包中使用它 我打算使用我看到的方法here https stackoverflow com questions 1640
  • 任何人都知道 JQuery 插件可以生成类似于 geni.com 上的树形菜单

    大家好 我花了几个小时寻找一个 Jquery 插件来生成像 geni com 上那样的树形菜单模块 如果有人知道 Jquery 中的这样的插件或脚本 请让我知道或指导我如何使用 Jquery 开发这样的功能 请检查我正在寻找什么http w
  • 支持向量机或人工神经网络进行文本处理? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 对于某些文本处理项目 我们需要在支持向量机和快速人工神经网络之间做出选择 它包括上下文拼写纠正 然后将文本标记为某些短语及其同义词 哪种方
  • 为什么 cross_val_predict 比 KNeighborsClassifier 的拟合慢得多?

    在 Jupyter 笔记本上本地运行并使用 MNIST 数据集 28k 条目 每个图像 28x28 像素 以下内容为27秒 from sklearn neighbors import KNeighborsClassifier knn clf
  • 将索引数组转换为 NumPy 中的 one-hot 编码数组

    给定一个一维索引数组 a array 1 0 3 我想将其一次性编码为二维数组 b array 0 1 0 0 1 0 0 0 0 0 0 1 创建归零数组b有足够的列 即a max 1 然后 对于每一行i 设置a i 第 列 至1 gt
  • 使用 scipy、python、numpy 进行非线性 e^(-x) 回归

    下面的代码为我提供了一条最佳拟合线的平坦线 而不是沿着 e x 模型的一条适合数据的漂亮曲线 谁能告诉我如何修复下面的代码以使其适合我的数据 import numpy as np import matplotlib pyplot as pl
  • 高维最近邻搜索的最佳数据结构

    我实际上正在处理高维数据 50 000 100 000 个特征 并且必须对其执行最近邻搜索 我知道随着维度的增长 KD 树的性能很差 而且我还了解到 一般来说 所有空间分区数据结构都倾向于对高维数据执行详尽的搜索 此外 还有两个重要事实需要
  • 约束 3D 表面的 RBF 插值以保持曲率

    我的任务是开发一种算法 给定一组表示现有表面测量值的稀疏点 我们就可以计算表面上任何点的 z 坐标 面临的挑战是找到一种合适的插值方法 该方法可以在仅给定几个点的情况下重新创建 3D 表面 并推断出超出包含初始测量值的范围的值 对于许多插值
  • 求解超定系统最小二乘的最快方法

    我有一个大小为 m n 的矩阵 A m 阶约为 100K n 阶约为 500 和向量 b 另外 我的矩阵是病态的并且等级不足 现在我想找出 Ax b 的最小二乘解 为此我比较了一些方法 scipy linalg lstsq 时间 剩余 14
  • 预训练 inception v3 模型的层名称(tensorflow)[重复]

    这个问题在这里已经有答案了 任务是获取a的每层输出预训练的 cnn inceptionv3 https www tensorflow org versions master tutorials image recognition index
  • Python 或 C 语言中的 Matlab / Octave bwdist()

    有谁知道 Matlab Octave bwdist 函数的 Python 替代品 此函数返回给定矩阵的每个单元格到最近的非零单元格的欧几里得距离 我看到了一个 Octave C 实现 一个纯 Matlab 实现 我想知道是否有人必须用 AN
  • 在监督分类中,使用partial_fit() 的MLP 比使用fit() 的表现更差

    我正在使用的学习数据集是灰度图像flatten让每个像素代表一个单独的样本 第二张图像在训练后将被逐像素分类Multilayer perceptron MLP 前一个分类器 我遇到的问题是MLP当它一次接收到所有训练数据集时表现更好 fit
  • 使用多级解决方案计算二维网格中的最近邻

    我有一个问题 在 x y 大小的网格中 我提供了一个点 并且我需要找到最近的邻居 在实践中 我试图在 pygame 中找到距离光标最近的点 该点跨越颜色距离阈值 计算如下 sqrt rgb1 0 rgb2 0 2 rgb1 1 rgb2 1
  • 在 scipy 中创建新的发行版

    我试图根据我拥有的一些数据创建一个分布 然后从该分布中随机抽取 这是我所拥有的 from scipy import stats import numpy def getDistribution data kernel stats gauss
  • 如何指定聚类的距离函数?

    我想对给定距离的点进行聚类 奇怪的是 似乎 scipy 和 sklearn 聚类方法都不允许指定距离函数 例如 在sklearn cluster AgglomerativeClustering 我唯一可以做的就是输入一个亲和力矩阵 这将非常
  • 使用时间、日期、时间增量

    我有一个问题 我的工作时间和时差很多 到目前为止 我已经使用许多 if 语句解决了这个问题 但这些语句很容易出错 在寻找更好的解决方案并且无需重新发明轮子的过程中 我遇到了时间 日期和时间增量 但这些对我来说似乎太不灵活了 所以我正在寻找如
  • Keras:多类 NLP 任务中 model.evaluate 与 model.predict 的准确性差异

    我正在使用以下代码在 keras 中为 NLP 任务训练一个简单模型 训练集 测试集和验证集的变量名称是不言自明的 该数据集有 19 个类 因此网络的最后一层有 19 个输出 标签也是 one hot 编码的 nb classes 19 m

随机推荐