问题标签 [scipy-spatial]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
160 浏览

python - 了解 scipy.spatial.Voronoi 以 3D 形式返回的山脊顶点

我不明白函数scipy.spatial.Voronoi的脊顶点的返回格式。在 2D 中使用此功能时,一个脊的顶点成对出现,这是我期望的格式,但在 3D 中,脊中的顶点数往往超过 2 个点。

为什么一个山脊需要超过 2 个点?

通过一些后处理,我可以将格式简化为每个脊 2 个点吗?

例子

intvor.ridge_vertices指的是 中的点索引vor.vertices

语境:

我想使用 voronoi 脊顶点来骨架化 3D 对象。为此,我将对象网格化以选择表面的点,将它们提供给函数scipy.spatial.Voronoi并使用对象内部的脊顶点作为我的骨架。

作为一种解决方法,我目前正在使用这些区域来猜测山脊顶点,但它容易出现错误并且速度很慢。学习如何正确使用返回的脊顶点应该可以解决这个问题。

我想使用 voronoi 骨架化的原因是因为它似乎最容易实现。我知道skimage.morphology.skeletonize_3d,但它往往会丢失较小的细节(不够明智)并且没有可使用的参数。

0 投票
1 回答
46 浏览

python - SciPy Delaunay三角剖分改变了单纯形的多个点,以实现参数的微小变化

我正在使用 Delaunay 三角剖分在一些函数值中进行插值,这些函数值是在常规 4 维网格上的一组参数处评估的。有时,当参数值发生少量变化并将其带到新的单纯形时,单纯形中不止一个点会发生变化。我希望随着我不断改变其中一个参数,我会通过一次仅更改单纯形中的一个点来从单纯形转移到单纯形(我的代码中通常也是这种情况)。相反,请考虑以下脚本:

产生

请注意,这两个单纯形相差 3 个点,我期望有一个,而且我还没有设计一个 2-D 或 3-D 示例,其中不止一个顶点会发生变化。

我 99% 确定这是因为我的分数在常规网格上,但我找不到关于为什么或如何避免问题的详细答案。我知道三角测量不是唯一的,但这从根本上不是问题。各种技巧似乎改变了我遇到这个问题的地方,但我还没有找到防止问题出现在任何地方的“修复”。

编辑

我设法找到了一个 3D 示例,这使我可以可视化问题。

这是输出的两个方面。

第一方面 第二个方面

蓝色和橙色的单纯形包含在它穿过y = 0(从正到负)之前和之后的插值点。我的假设是两个单纯形沿y = 0 平面具有相同的三角形面,但显然这是不正确的。在这种退化的情况下,这是 Delaunay 三角剖分的基础还是与实施有关?有没有办法避免它?QHull 选项Qx(在 SciPy 的 D>4 的默认选项中)似乎对这个例子有帮助,但我不确定全局。

0 投票
3 回答
56 浏览

python - 如何计算数组之间的相似度?

我正在尝试计算两个样本之间的相似性。我不满意的python函数sklearn.metrics.pairwise.cosine_similarity和 返回结果。scipy.spatial.distance.cosine例如:

  • 在下文中,我预计为 0.0%,因为这两个样本没有相同的样本。

  • 我预计会有 0.25% 的相似性,因为两个数组中只有一个样本,即第一个 (1) 样本是相同的。

  • 以同样的方式,我们有以下我预计预期为 0.5% 的情况。两个相同的样本(1 和 16)

  • 这里预计为 0.75%。三个相同的样本(1、16 和 4)

python有没有办法实现那些预期的结果?

0 投票
1 回答
56 浏览

scikit-learn - Voronoi 图说明

我正在尝试生成 Voronoi 分割多边形,但无法理解 Voronoi 的 Scipy 实现中的参数“furthest_site=True”。

从 scipy.spatial 导入 Voronoi,voronoi_plot_2d

点 = np.array([[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [ 2, 1], [2, 2]])

vor = Voronoi(点,最远的站点=真)

将 matplotlib.pyplot 导入为 plt

图 = voronoi_plot_2d(vor) plt.show()

这给了我输出: 在此处输入图像描述

属性“furthest_site=True”的解释是什么

0 投票
0 回答
37 浏览

python - SciPy Rotation 仅在我使用 inv() 时给出正确答案

我在这里做错了什么?

我有一个使用旋转矩阵和 NumPy 旋转欧拉角输入的函数。这被证明是正确的,因为它目前正在无人机上运行,​​这些无人机在其飞行控制回路中实时使用它。

我正在尝试使用 SciPy Rotation 来实现相同的功能。当我这样做时,结果是乱码,但是如果我似乎没有理由将 inv() 放在那里,它会给出正确的答案。东西放哪儿了?

VF、BUL 和 VTOL 只是不同的参考系。我从 yaml 加载旋转矩阵。我的输入 (vehicle_rph) 是在 VF 框架中测量的向量时间序列数组,但我需要知道 VTOL 框架中的答案。yaml 中的所有内容都与 BUL 进行比较,因此为了从 VF 到达 VTOL,如果必须通过 VF -> BUL -> VTOL

下面我做了两次——一次在 NumPy 中,一次在 SciPy 中。如您所见,当我将随机 inv() 放在那里时,NumPy(被证明是正确的)与 SciPy 匹配。如果你能告诉我为什么 Z 轴略有不同,那么加分,但它已经足够接近我的需要了。

提前致谢!!

输入:

输出:

0 投票
1 回答
50 浏览

python - 如果 Scipy.spatial.distance.cdist 使用双 for 循环,为什么它会很快?

我被告知双 for 循环在 Python 中很慢。然而,在深入研究Scipy.spatial.distance.cdist()的实现时,我发现它只是一个双循环而不是一些聪明的 numpy 技巧。然而,许多答案(例如https://stackoverflow.com/a/62416370)建议使用cdist().

我的问题是:如果函数只是天真地迭代 O(n^2) 中的所有元素,为什么它仍然如此之快?

0 投票
1 回答
73 浏览

python-3.x - 将单纯形从 Delaunay 三角剖分转换为 networkx 图

这是此处帖子的后续内容。

我正在尝试将从 Scipy 的 Delaunay 三角剖分返回的单纯形转换为 Networkx 图。

代码:

错误:

我不确定如何解决此错误。建议将非常有帮助。

0 投票
1 回答
43 浏览

python - 从 scipy.spatial.Delauna 加速“find_simplex”

我使用 Scypi 的 Delaunay 三角剖分构建了一个应用程序。为了验证它,我想做一个 Hold-One-Out 测试,这意味着下面提到的代码片段被调用了很多次(~1e9)。因此,我想让它尽可能快。

这是我想加快速度的最小工作示例:

大部分时间都被find_simplex方法用完了,在我的机器上大约 200 毫秒到 300 毫秒。有什么办法可以加快速度吗?我已经查看了 Delaunay 构造函数中的qhull_options,但是我没有成功。

请注意,我无法更改整体结构,因为“真实”程序运行良好,并且此计算仅用于验证。非常感谢!

0 投票
1 回答
103 浏览

python - 如何计算 Python 中特定区域中的 Voronoi 单元格?

在每一帧的实验中,我有一些点可以说明行人的头部。我需要计算特定区域中的 Voronoi 细胞 - 测量正方形:

所以我改编了一个从点生成 Voronoi 细胞的样本+ 我添加了测量区域(蓝线)和墙壁(黑色),这是第 0 帧的结果:

绘制的 Voronoi 单元的第 0 帧

这是代码的一部分(改编自示例):

据我所知,为了计算哪些单元格在测量区域内,我需要检查哪些单元格线与测量正方形交叉或在其内。因此,根据scipy.spatial.Voronoi 的文档,有趣的属性是:vertices,它返回那些橙色顶点。我还需要在测量区域内有顶点的边缘,根据scipy.spatial.Voronoi 的文档的属性ridge_vertices,但不幸的是它返回了一些奇怪的东西:

在文档中,我看不到如何理解返回的数字。也在教程中解释如何解决我的问题。所以我的问题是:如何计算在测量区域内至少有一个点的 Voronoi 细胞?

0 投票
1 回答
39 浏览

python - 我无法正确导入 scipy.spacial.distance

它说“无法解决”。我正在将 python 用于 boids 程序。