【发布时间】:2020-02-06 20:29:59
【问题描述】:
我有 N 个点(N 大约是 12000),并计算这 N 个点的质心Ct。
我想知道,从 N 个点中可以找到多少个三角形,每个三角形的质心为Ct。
我做了什么:
1.使用 pandas 将 N 个点的坐标读入数据框。 (以下所有数据仅供参考)
PntsDF
x y
a1 1 1
a2 1 2
...
a12000 100 100
2.将N个点按极坐标分为三部分,可以大大降低计算复杂度。
PntsDF
x y Part
a1 1 1 Sec1
a2 1 2 Sec1
...
a12000 100 100 Sec3
3.使用笛卡尔积得到三部分的点组合,比itertools快。
CombsDF:
p1 p2 p3
1 a1 a2 a1000
2 a1 a2 a1001
...
64000000000 a12000 a200 a201
4.检查Ct是否为三角形组合
4.1 查找组合[a1 a2 a1000]的对应坐标很慢,大概需要6秒完成查找过程。
由于 N 大约为 10 000,因此即使使用我的工作站,仍需要几个小时才能完成计算。
非常感谢任何关于如何缩短计算时间的 cmets。
【问题讨论】:
-
你能发布你的代码吗?只有结果有点难以优化。
-
如果你有 12k 个点,大约有 1.7e12 个可能的三角形,你可能会过滤掉大约 1/2,仅存储坐标仍然有相当多的 TB。你真的有能力做到这一点吗?
several hours你说??? -
没那么大。 Combin(12000,3) 约为 2.9E11。根据我的估计,质心所在的三角形不会超过 640 亿。所以它可以用现代计算机来完成。但需要更多的效率。