问题标签 [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.
python - 构造具有已知三角形面的凸包对象
TLDR:我需要构建一个用于快速内点测试的 python 对象,类似于 SciPyConvexHull
或DelaunayTriangulation
. 问题是我提前知道必须构造点的三角剖分的顺序:(6 个点,8 个三角形面,每个面都有特定的顺序)。实际上,我已经知道凸包应该是什么,但我需要一种可以与现有(和优化!)库(例如 Scipy spatial)一起使用的形式。我怎样才能做到这一点?
背景: 我需要构建一个三角棱镜(想象一个 Toblerone 条 - 2 个端面,6 个侧面,全部为三角形)以进行一些内点测试。由于我将有许多这样的棱镜彼此相邻放置(在它们的侧面相邻,想象许多 Toblerone 条竖立在它们的末端并且彼此相邻),我需要小心确保空间中没有区域被两个包含相邻的棱镜。棱镜的横截面通常不均匀,因此相邻棱镜之间可能重叠,如下图所示两个相邻棱镜之间的近似平面:
注意沿着面部构造的两条不同的对角线——这就是问题所在。一个棱镜可能会使用 \ 对角线将面分成两个三角形,而相邻的棱镜可能会使用 /。为了确保相邻棱镜之间没有重叠,我需要明确控制三角形的形成顺序,以便它们始终使用相同的对角线。我可以做到这一点:对于我需要构建的每个棱镜,我提前知道应该以什么顺序构建三角形面。这是两个相邻棱镜的图示,它们之间有正确的共享对角线:相邻棱镜,共享对角线
我的问题是使用这些棱镜进行快速内点测试。以前,我使用的是这个答案中链接的方法:Delaunay(prism_points).find_simplex(test_points) >= 0
。它很快,因为它使用了高度优化的库代码,但我无法控制三角剖分的构造,所以可能会有重叠。
如果我将外壳构造为显式np.array
对象(顶点、面),那么我可以使用自己的代码进行测试(有许多可能的方法,我正在投射光线并测试与每个三角形面的交点)。find_simplex()
问题是这比前面提到的方法慢了大约 100 倍。虽然我确信我可以更快地获得代码,但值得指出的是,这段代码已经从 Cython 的另一个用例中得到了相当优化 - 我不确定我是否能在这里找到我需要的所有额外速度。至于不可避免的“你真的需要速度问题”,请相信我的话。这将 5 分钟的工作变成了数小时。
我需要的是构建一个可以与外部优化库一起使用的对象,同时保留对三角形面的控制。在我的代码中添加额外的 Cython 当然是一种选择,但是已经存在这样高度优化的代码,使用它会非常可取。
感谢任何可以提供帮助的人。
python - 如何避免 Delaunay.find_simplex 函数返回 -1
我有一组 500 个 7D 点数组。当我运行以下代码时:
Delaunay.find_simplex
仅对 500 个数据点中的一个数据点返回 -1。我知道该点位于三角剖分之外,因此得到值 -1。如何在不改变数组维度的情况下将这一点包含在三角剖分中?
python - python中具有不同列数的2xN矩阵的hausdorff距离
我有两个 2xN 值矩阵,我想使用“directed_hausdorff(u,v)”函数找到它们的 hausdorff 距离。但是,由于两个矩阵中的列数不相等,我想找到使用列数较少的矩阵的 hausdorff 距离。例如,如果我有
l
有 3 列,t
有 4 列。因为t
比l
我想修改的要大t
,所以它的大小相同,l
所以我可以计算相同大小的矩阵之间的 hausdorff 距离,基本上变成
我想将此应用于任何两个 2xN(不同大小)的矩阵,在其中我确定哪个矩阵具有更多列,然后通过消除从最后一列开始的元素来修改较大的矩阵,使其等于较小矩阵的大小。是否有一种快捷方法可以自己输出两个列表?
python - 如何使用 k 最近邻的最大值将空间数据从不规则网格插入到规则网格?
我有一个问题困扰了我几天。:
有 17 个带有值和相应纬度和经度坐标的 numpy 数组。它们中的每一个都包含 360*600 点。这些点在某些部分重叠。我最终想要做的是在一个常规网格中组合数据。
使用通用scipy.interpolate.griddata
功能时,我遇到的问题是,在这些重叠区域中,我经常有不同的值。这会导致您在第一张图片中看到奇怪的伪影:
我的第一个想法是取插值中使用的值的最大值。我发现scipy.interpolate.griddata
使用三角测量进行插值,但实际上我找不到可以适应的管道。
我希望你能理解我不分享任何代码 bc。数据集很大,我的问题更多是关于找到最佳实践或接收一些有趣的想法来解决这个问题。预先感谢您的支持。
python - 是否对 SciPy 对 Jaccard-Needham (Dis) 相似性公式的实现有更清晰的描述?
我已经查看了 SciPy 的文档,解释了 Jaccard-Needham 相异函数的实现公式https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.jaccard.html#scipy.spatial.distance。杰卡德。但是,在下面的公式中,我找不到任何解释下标“TF”或 FT“代表什么的东西:
python-3.x - 使用 Delaunay 三角剖分创建 networkx 图
我有一个 Delaunay 三角剖分(DT)(scipy),如下所示:
现在,我想使用“networkx”包创建一个图形,并添加使用 DT 从上面找到的节点和边。
我想出的将 DT 单纯形中的唯一节点添加到“G”中的代码是-
如何使用“dt.simplices”将边添加到“G”?例如,第一个三角形是 [1, 3, 4, 0] 并且位于节点/顶点 1、3、4 和 0 之间。如何确定哪些节点相互连接,然后将它们作为边添加到'G'?
另外,有没有更好的方法将节点添加到“G”?
我正在使用 Python 3.8。
谢谢!
python - scipy.spatial.transform.Rotation 旋转数组与同一对象内的堆栈
在一个项目中,我必须在 python 中存储一个对象的一系列连续旋转。我打算使用scipy.spatial.transform.Rotation objects存储它们。
我注意到有两个选项可用。
我将多个 Rotation 对象存储在一个数组中,每个 Rotation 对象都包含我序列的一个旋转。
我将每个旋转都存储在同一个 Rotation 对象中,有效地将它们堆叠在一个对象中。
我想知道这些方法在计算速度和数据访问速度方面的权衡是什么。最终应该首选哪种方法。
在我的特殊情况下:
- 我有一组相当大的旋转(大约 2'000'000)。
- 我想尽可能加快我的数据的访问时间。
- 我不关心内存使用情况,所以我愿意以空间换取速度。
- 我不打算将我的轮换应用于任何事情。这纯粹是为了存储使用。
- 我将不得不以四元数 (.as_quat()) 和欧拉角 (.as_euler()) 的形式访问我的旋转
- 我将不得不在某个时候将我的数据拆分成更小的块(而且我知道,如果我使用单个 Rotation 对象,我可能必须在每个块上重新创建才能正确拆分我的数据)
我在找什么:
- 访问时间最快的方法
- python中更接近良好实践和编码约定的方法
提前致谢。
python - SciPy cdist 速度差异
我很好奇为什么以下内容cdist
在时间上差异如此之大,即使它们产生相同的结果:
result_1
明显快result_2
于。
scipy - Scipy坐标系
我找不到 scipy 坐标系的定义。我尝试了几个值(假设是右手系统)但得到了一个奇怪的结果。例如:
意味着围绕 z 轴的逆时针旋转(对于右手系统来说是正确的)是反向的(意味着左坐标系)......
我在哪里可以找到定义??
谢谢!!!