如何提高在python中查找集群的效率?

时间:2014-12-12 20:06:37

标签: python arrays loops cluster-computing depth-first-search

现在我正在做的项目是关于渗透,其描述如下: 半径为r的N个磁盘随机分布在一个单元上。如果磁盘足够接近(2r内),则它们已连接。连接的磁盘形成集群,随着磁盘密度的增加,将形成更多的集群。一旦密度达到阈值,方形区域的两个相对侧将由簇连接。我的任务是弄清楚这个门槛值。

现在我的算法如下:

  1. 我使用np.random.uniform创建一个存储N坐标的Nx2数组。
  2. 我创建了一个函数findoverlap(coordinates_array, r),它使用一个循环检查两点之间的距离(如果有N个点,则有N(N-1)个检查,因为对于每个点我检查所有其他点N-1分),如果距离足够短,我将坐标存储在字典中。 例如{0:[1,2],1:[0,3],2:[0],3[1]}表示磁盘0连接到磁盘1和2,磁盘1连接到磁盘0和3等。
  3. 我使用深度优先搜索来返回基于先前创建的字典的群集列表。
  4. 对于每个群集,我使用循环检查每个点的坐标,看它是否连接到墙的一侧。一旦我找到了将整个集群连接到双方的两个点,我就继续检查下一个集群。
  5. 对于N的每个值,我多次重复整个模拟以计算该密度的概率P,从而导致双方成功连接。然后我改变N并得到密度和P之间的关系,这样我就可以找到阈值。
  6. 由于我想尝试模拟无限系统,我需要使r尽可能小。对于r = 0.02(方形区域为单位长度)和N为1000,重复模拟50次需要大约20分钟。

    • 如何改进代码并提高效率?
    • 我可以使用更好的算法吗?

    顺便说一句,我所拥有的课程适用于没有任何编程经验的第一年的理科学生,而且我已经完成了该项目的所有基本任务。我想我不需要做任何太花哨的东西,但我仍然希望尽可能好。

0 个答案:

没有答案