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

如何提高在python中查找集群的效率?,python,arrays,loops,cluster-computing,depth-first-search,Python,Arrays,Loops,Cluster Computing,Depth First Search,现在我正在做的项目是关于渗流的,描述如下: 一个单元上随机分布有N个半径为r的磁盘。如果磁盘足够近(在2r内),则它们已连接。连接的磁盘形成集群,随着磁盘密度的增加,将形成更多的集群。一旦密度达到阈值,正方形区域的两个相对侧将由簇连接。我的任务是找出那个阈值 现在我的算法如下: 我使用np.random.uniform创建一个存储N个坐标的Nx2数组 我创建了一个函数findoverlap(坐标数组,r),它使用一个循环来检查两点之间的距离(如果有N个点,则有N(N-1)个检查,因为对于每个点,

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

现在我的算法如下:

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

    • 如何改进代码并使其更高效
    • 有没有更好的算法我可以使用

    顺便说一句,我所学的课程是为没有编程经验的物理系一年级学生开设的,我已经完成了这个项目的所有基本任务。我想我不需要做太花哨的东西,但我还是想把它做得尽可能好。

    问得好!你不能用图论来表达你的数据吗?看见