とりあえずスモールワールドになってるかなーと調べるために、参考書と同じ設定でネットワークを作成して、平均距離とクラスター係数が同じくらいになるかどうかを調べてみようということで、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 件のコメント:
コメントを投稿