python实现small-world networks

用python画出小世界网络,主要用到了4个库,turtle,numpy,math, random。

import turtle
from math import *
import random
import numpy as np

#turtle.left(90)
#turtle.pendown()
#turtle.circle(200, 90)
#turtle.pendown()
#turtle.circle(20)
#turtle.circle(200, 90)
#def make_graph(n):


def Goto(start, end):
    turtle.pendown()
    turtle.goto(end[0], end[1])
    turtle.goto(start[0], start[1])


def make_graph(n, p):
    Rad = 100
    rad = 5
    turtle.penup()
    turtle.forward(Rad)
    turtle.left(90)
    angel = 360 / n
    for i in range(0, n):
        turtle.pendown()
        turtle.circle(-rad)
        turtle.penup()
        turtle.circle(Rad, angel)
    #得到图的邻接矩阵

    matrix =np.zeros([n,n], dtype = int)

    for i in range(0, n):
        matrix[i][ (i+1+n)% n ] = 1
        matrix[ (i+1+n)% n ][i] = 1
        matrix[i][(i+2+n)%n] = 1
        matrix[(i+2+n)%n][i] = 1
        matrix[i][(i-1+n)%n] = 1
        matrix[(i-1+n)%n][i] = 1
        matrix[i][(i-1 + n)%n] = 1
        matrix[(-1 + n)%n][i] = 1
    #print(matrix[1][1])
    for i in range(0, n):
        for j in range(-2, 3):
            new_index = (i+j + n) % n
            if matrix[i][new_index] == 1:
                temp_p = random.random()
                if temp_p < p:
                    matrix[i][new_index] = 0
                    matrix[i][new_index] = 0
                    while 1:
                        t = random.randint(0, n-1)
                        if matrix[i][t] != 1 and t != new_index:
                            matrix[i][t] = 1
                            matrix[t][i] = 1
                            break

    #得到各个点的距离
    position = []
    pi = acos(-1)
    for i in range(0, n):
        temp_list = []
        temp_list.append( Rad * cos( i * angel * pi / 180 ) )
        temp_list.append( Rad * sin( i * angel * pi / 180 ) )
        position.append(temp_list)
    #print (len(position[1]))
    #连线
    for i in range(0, n):
        for j in range(0, n):
            if matrix[i][j] == 1:
                Goto(position[i], position[j])
        turtle.penup()
        turtle.circle(Rad, angel)
    turtle.done()


def main():
    n = 10
    random.seed(10)
    # turtle.screensize(800, 600, 'green')
    turtle.setup(width=400, height=300, startx=0, starty=0)
    turtle.speed('fastest')
    make_graph(n, 0.15)

main()

画出图:

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值