在 Python 中高效操作笛卡尔坐标列表

2024-04-24

背景:

我正在编写一个程序,用于处理与各种规则形状的顶点网络相关的大量数据。我有一个工作生成器,它根据一系列用户输入参数生成与所述形状的顶点相对应的笛卡尔坐标列表。然后,数据被传递到过滤器,过滤器清除重复的条目,对数据进行排序和各种其他功能,从过滤器将清理后的数据输入到循环并绘制顶点的画布模块。

问题:

我需要实现一个新的过滤器,该过滤器可以有效地循环遍历坐标,将每一对与其他每一对进行比较,即(x1,y1)->(x2,y2) to (x1,y1)->(xn,yn), (x2,y2)->(x3,y3) to (x2,y2)->(xn,yn)等等对于所有条目,例如,如果之间的关系(x1,y1) and (x5,y5) fits [(x5-x1)^2+(y5-y1)^2]=vertex_spacing^2,然后将两组坐标与其各自的列表条目编号配对,并附加到一个新列表,其中一个条目的形式为:[(x1,y1), (x5,y5), 0, 4]例如。实现这一目标最有效的方法是什么?

我的尝试:

我在这里和各种指南上研究了很多处理列表的方法。我尝试过嵌套“for”和“if”循环,但发现虽然这种方法可以工作,但它会导致运行时间过长,并且试图将问题分解为许多较小的 for 循环。

进一步说明:

这样做的最终目的是将生成的坐标用于前端界面元素,并根据需要进行保存和导入。列表位置0和4的功能[(x1,y1), (x5,y5), 0, 4]是使接口能够对坐标进行分组,以便以后在画布对象中使用。该方法应该能够处理潜在的数千个坐标。

提前感谢您的任何帮助,如果不清楚我以任何方式询问什么,我当然愿意改进我提供的措辞/信息和/或添加示例代码 - 我对此仍然很陌生! :)


您基本上要检查的是:

对于每个顶点v,找到所有顶点u这样u位于半径圆上vertex_spacing around v.

如果点的分布不是所有点都靠近,我想到两种方法来加速搜索:

  1. 加速此过程的最简单方法是按 x 坐标对点进行排序。这样,您就可以跳过许多比较。作为一个简单的例子,假设 x 坐标是[1, 2, 10, 15, 18, 20, 21] and vertex_spacing = 5。您只需将第一个顶点与第二个顶点进行比较,因为所有其他顶点显然都在第一个顶点周围的圆之外。

    请注意,如果所有点都靠近,则此方法毫无用处。换句话说,如果vertex_spacing = 25,您不能跳过任何比较。

  2. 同样,您可以使用二维k-d tree http://en.wikipedia.org/wiki/Kd_tree。这相当于排序方法,但是是二维的。给定一个顶点(x, y) and vertex_spacing = v,你必须检查范围内的所有点([x-v, x+v], [y-v, y+v])。使用与之前相同的示例,假设第一个点有坐标(1, 0)第二个(2, 10),不需要将第一个顶点与任何东西进行比较。

这两种方法都是启发式的,并且不会对最坏情况的运行时间做出任何改进(恰恰相反:您还有排序/构建 k-d 树的开销),但如果顶点通常至少vertex_space除此之外,这可以大大加快您的搜索速度。

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

在 Python 中高效操作笛卡尔坐标列表 的相关文章

  • 重写修改后的 goto 语义的算法

    我有一大堆使用旧的自行设计的脚本语言编写的遗留代码 我们将它们编译 翻译成 javascript 该语言有条件跳转 跳转到标签 与普通 goto 语句的区别在于 不可能向后跳转 该语言中没有嵌套的 if 语句或循环 由于 javascrip
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • pandas 替换多个值

    以下是示例数据框 gt gt gt df pd DataFrame a 1 1 1 2 2 b 11 22 33 44 55 gt gt gt df a b 0 1 11 1 1 22 2 1 33 3 2 44 4 3 55 现在我想根据
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • 总和不小于 key 的数组的最小子集

    给定一个数组 假设为非负整数 我们需要找到最小长度子集 使得元素之和不小于 K K 是作为输入提供的另一个整数 是否有可能找到时间复杂度为 O n n 的大 oh 的解决方案 我目前的想法是这样的 我们可以在 O n log n 中对数组进
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • 使用 Pycharm 在 Windows 下启动应用程序时出现 UnicodeDecodeError

    问题是当我尝试启动应用程序 app py 时 我收到以下错误 UnicodeDecodeError utf 8 编解码器无法解码位置 5 中的字节 0xb3 起始字节无效 整个文件app py coding utf 8 from flask
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm
  • 使用基于正则表达式的部分匹配来选择 Pandas 数据帧的子数据帧

    我有一个 Pandas 数据框 它有两列 一列 进程参数 列 包含字符串 另一列 值 列 包含相应的浮点值 我需要过滤出部分匹配列 过程参数 中的一组键的子数据帧 并提取与这些键匹配的数据帧的两列 df pd DataFrame Proce
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • iOS-示例中的协议和委托

    好吧 我正在寻找 但没有任何方法对我有用 以下代码基于许多教程和苹果文档 但我无法让它工作 有人可以帮忙吗 代码崩溃于 obj delegatee self 在 B h 类中 respondsToSelector 和 PerformSele
  • 尝试使用工作台将 postgresql 数据库迁移到 mysql 时出错

    我正在尝试按照本教程将 postgresql 数据库迁移到 mysql http mysqlworkbench org 2012 11 how to migrate postgresql databases to mysql using t
  • Healpy python-3..4 在 ubuntu-14.04 上的安装问题

    我是 ubuntu 新手 在 lenovo t410 上使用 ubuntu 14 04 和 python 3 4 为了安装 Healpy 我遵循了以下步骤 我已经使用安装了 python3 dev 包 sudo apt get instal
  • Visual Studio Code / powershell 命令历史记录向上键

    我可以通过什么方式在 Visual Studio Code 中记录之前输入的命令 例如 当我按下向上键时 我可以向上浏览之前的所有命令 如果可能的话 我想将这些记录到文件中 它们本地存储在哪里 我可以用节点之类的东西记录它吗 实际上 我自己
  • 在页面显示到屏幕之前删除 DOM 元素(在 Chrome 扩展中)

    我正在尝试创建一个扩展 该扩展将在页面显示到屏幕上之前删除某些页面元素 按 id 或类 我尝试在文档上使用事件侦听器 以 DOMContentLoaded 作为事件 但 javascript 似乎在页面显示给用户后执行 然后删除它 所以它不
  • 基于 Django 类的视图和表单集

    我有一个基于类的视图称为OrganizationsCreateView它包括附加到模型表单的表单集作为该表单的实例变量 当用户输入数据时 这可以正常工作 可以很好地创建一个新对象 当用户想要向表单集中添加其他行时 我有一个提交按钮 可以触发
  • iOS glGenerateMipmap 是同步的,还是可能是异步的?

    我正在开发一个在 OpenGL ES 中使用大纹理的 iPad 应用程序 当场景首次加载时 我在天花板上看到了几帧的大型黑色伪像 如下图所示 就好像更高级别的 mipmap 尚未填充 在后续帧中 天花板正确显示 当我开始使用 mipmapp
  • 如何使用 mongocxx c++ 驱动程序递归生成 Mongodb 文档?

    如何使用 mongocxx c 驱动程序递归生成 Mongodb 文档 1 我使用 mongocxx c 驱动程序 v 3 和 c 11 2 这是我的 main cpp 方法 它解析十六进制字符串并生成 mongocxx 代码 如下所示 控
  • 在 Trie 中插入值

    我在 SML 目录中找到了 Trie 的实现 signature DICT sig type key string concrete type type a entry key a concrete type type a dict abs
  • Android 无法初始化 Visualizer 引擎,错误:-4

    我有一个错误 public class VisualizerCapture extends Activity implements Visualizer OnDataCaptureListener private Visualizer mV
  • 玩 Scala 和线程安全

    该项目是使用编写的Play framework and Scala语言 我已经实施了compile time dependency 我按照 Play 中的这个例子进行操作 https github com playframework pla
  • 通过循环遍历另一个数组来填充新数组

    我正在做一些计算 根据用户输入 应进行计算并构建包含数据的表格 我的第一个数组 calcTable正在按预期工作 但是每一行代表一个月 在我的决赛表中 我想要一行代表一年 所以我目前正在尝试填充一个新数组 calcTableShow将保存这
  • Ada:如何解决“循环单元依赖”?

    假设我有两条记录 Person and Animal 每条记录都在一个单独的包中 包人 with animals use animals package persons is type person is record animalref
  • 仅将样式表应用于特定元素特征

    经过一番谷歌搜索后 我无法找到答案 所以这是我的问题 有没有办法指定应应用整个样式表的特定元素特征 例如 id 例如 如果我有一个像这样的 html 块 div div 有没有办法指定其中包含的规则 style css应该只应用于与 in
  • 安卓输入法连接错误

    我正在将我的 Android 客户端模拟器连接到服务器 Servlet 输出流工作正常 服务器正在打印从客户端发送的消息 服务器正在成功发送响应 但android输入连接是被动的 这里的错误显示在logcat中 showStatusIcon
  • 如何防止 IIS 默认站点 web.config 文件被虚拟目录继承?

    我在默认 IIS 站点的 web config 文件中有以下代码
  • 如何在 JavaScript 中将字符串的第一个字母变为大写?

    如果字符串是字母 如何将其第一个字符设为大写 但不更改任何其他字母的大小写 例如 this is a test This is a test the Eiffel Tower The Eiffel Tower index html inde
  • 如何在 Windows 8 Metro 应用程序中获取设备 ID

    如何获取Windows应用商店应用 Metro应用 中的唯一设备 我们可以使用 Windows System Profile HardwareIdentification GetPackageSpecificToken null Windo
  • 使用注释通过嵌套事件在 Moshi 中序列化 Null

    我正在尝试添加自定义注释 以便在调用时将模型中的特定值序列化为 nulltoJSON来自莫西的方法 我有一些基于此的工作response https stackoverflow com questions 52254876 moshi cu
  • 在 Python 中高效操作笛卡尔坐标列表

    背景 我正在编写一个程序 用于处理与各种规则形状的顶点网络相关的大量数据 我有一个工作生成器 它根据一系列用户输入参数生成与所述形状的顶点相对应的笛卡尔坐标列表 然后 数据被传递到过滤器 过滤器清除重复的条目 对数据进行排序和各种其他功能