2017年7月8日土曜日

Watts-Strogatzモデルのネットワーク検証中

とりあえずスモールワールドになってるかなーと調べるために、参考書と同じ設定でネットワークを作成して、平均距離とクラスター係数が同じくらいになるかどうかを調べてみようということで、N=1000、<k>=6(k_half=3)、p=0.05で平均距離を求めようと下のような関数を書いて計算させて現在1時間経過。。。
参考書だと1000回の平均出してるんだけど、私のPCでは厳しそうである。しかもクラスター係数も絶対時間かかるよなぁ。。。。。。
脳灰白質のROIならN=100ちょっとくらいだけど、SNSの解析とかするならN=1000くらいならすぐ到達しそうだよなーと思うと厳しい世界だ。

明日朝一でサテ室のパソコンで回してみるとする。以前何だかの計算をサテPCにやらせてみたらめちゃくちゃ速かったので。そして回してる間に明日はBAモデルもやってみようか。

----------------------------------------------------------------
def cal_L(list, N):
    mean_length=np.zeros(N)
    for i in range(N):
        mean_length[i]=np.sum(dykstra_neighborlist(list, N, i))/(N-1)
 
    L=np.sum(mean_length)/N
    return L


def dykstra_neighborlist(list, N, start):
    end=np.zeros(N)+inf
    end[start]=0
 
    while np.sum(end)==inf:
        candidate=np.zeros(N)+inf
     
        for i in range(N):
            if end[i]!=inf:
                neighbor_list=extract_neighborlist(list, i)
                for j in range(neighbor_list.shape[0]):
                    if end[np.int(neighbor_list[j, 1])]==inf:
                        length=end[i]+1
                        if candidate[np.int(neighbor_list[j, 1])]>length:
                            candidate[np.int(neighbor_list[j,1])]=length
                         
        candidate[end!=inf]=inf
        end[np.argmin(candidate)]=np.min(candidate)
 
    return end

def extract_neighborlist(list, i):
    neighbor1=list[list[:, 0]==i]
    neighbor2=list[list[:, 1]==i]
    for j in range(neighbor2.shape[0]):
        temp=neighbor2[j, 0]
        neighbor2[j, 0]=neighbor2[j, 1]
        neighbor2[j, 1]=temp
 
    neighbor_list=np.r_[neighbor1, neighbor2]
 
    return neighbor_list

0 件のコメント:

コメントを投稿