我正在编写一个程序来处理与各种规则形状的顶点网络相关的大量数据.我有一个工作的发生器,它根据一系列用户输入参数产生一个与所述形状的顶点相对应的笛卡尔坐标列表.然后将数据传递给过滤器,过滤器清除重复的条目,对数据和各种其他功能进行排序,从中将清理后的数据送到画布模块,画布模块循环并绘制顶点.
我需要实现一个新的过滤器,有效地通过坐标循环,每对对每隔一对比较,即(x1,y1)- > (x2,y2)到(x1,y1)- > (xn,yn),(x2,y2)- > (x3,y3)到(x2,y2)- > (xn,yn)等,为所有条目,例如,如果之间的关系(x1,y1)和(x5,y5)配合[(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]是使接口能够对坐标进行分组,以便以后在画布对象中使用.该方法应该能够处理数千个坐标.
提前感谢您的帮助,我当然愿意改进我提供的措辞/信息和/或添加示例代码,如果不清楚我在问什么 - 我还是很新的!:)
背景:
我的Python程序处理相对大量的数据,这些数据可以在程序中生成,也可以导入。然后对数据进行处理,在这些过程之一期间,数据被有意复制,然后进行操作,清除重复项,然后返回到程序以供进一步使用。我正在处理的数据非常精确(最多 16 位小数),将这种精度保持在至少 14dp 至关重要。然而,数学运算当然可以返回我的浮点数的轻微变化,这样两个值与 14dp 相同,但可能与 16dp 略有不同,因此意味着内置函数无法正确set()删除此类“重复项”(我使用这种方法可以对想法进行原型设计,但对于最终的程序来说并不令人满意)。我还应该指出,我很可能忽略了一些简单的事情!我只是有兴趣看看其他人想出了什么:)
问题:
从可能非常大的数据集中删除非常接近的重复项的最有效方法是什么?
我的尝试:
我尝试将值本身舍入为 14dp,但这当然不能令人满意,因为这会导致更大的错误。我对这个问题有一个潜在的解决方案,但我不相信它尽可能高效或“Pythonic”。我的尝试包括查找与 x dp 匹配的列表条目的索引,然后删除匹配的条目之一。
预先感谢您的任何建议!如果您有任何需要澄清的地方,或者当然,如果我忽略了一些非常简单的事情(我可能正处于思考过度的阶段),请告诉我。
关于“重复”的说明:
我的“重复”条目之一的示例:603.73066958946424、603.73066958946460,解决方案将删除这些值之一。
关于decimal.Decimal的注意事项:
如果保证所有导入的数据不存在一些接近重复的数据(它经常这样做),那么这可能会起作用。
背景:
我的程序目前在 Python 中组装数组。这些数组连接到前端 UI,因此具有交互元素(即用户在数组元素中指定的值)。然后将这些数组保存到 .txt 文件中(取决于它们以后的用途)。然后,用户必须离开 Python 程序并运行一个单独的 Fortran 脚本,该脚本根据 Python 输出文件模拟系统。虽然这最多只需要几分钟,但我理想情况下希望自动化该过程,而无需离开我的 Python UI。
组装数组 (Python) ->编辑数组 (Python) ->导出到文件 (Python)
->导入文件 (Fortran) ->运行模拟 (Fortran) ->将结果导出到文件 (Fortran)
->将文件导入到 UI,显示图表 (Python)
问题:
这可能吗?我有哪些选项可以自动化此过程?我可以完全删除文件的重复导出/导入吗?
编辑: 我还应该提到 fortran 脚本使用 Lapack,我不知道这是否有区别。
python ×3
list ×2
python-2.7 ×2
algorithm ×1
arrays ×1
coordinates ×1
duplicates ×1
f2py ×1
fortran ×1