2013-04-27 19 views
0

我有這個部分做一些組中的一些隨機鏈接。我可以讓它更有效率嗎?任何想法?matlab更高效的隨機鏈接創建

謝謝。

n=[10 ;10 ;10]; 
no_of_groups=size(n,1); 
for k=1:no_of_groups 
    if k==1 
     m{k,1}=randi(n(1), n(1),2);%random links between nodes of group1 
     m1=rand(n(1),1)/2+0.5;%random weight to edges 
     c{k,1} = cat(2,m{1},m1); 
    else 
     m{k,1}=randi([((k-1)*n(k-1)+1) (k*n(k))],n(k),2););%random links between nodes of group k 
     m1=rand(n(k),1)/2+0.5; 
     c{k,1} = cat(2,m{k,1},m1); 
    end 
end 
c=cat(1,c{:}); 

回答

1

速戰速決是預分配mcinitiliaze他們的循環之外,以刪除if條件:

n = [10 ;10 ;10]; 
no = size(n,1); 

% Preallocate 
m = cell(no,1); 
c = cell(no,1); 

% Initialize m and c 
m{1} = randi(n(1), n(1),2);%random links between nodes of group1 
m1 = rand(n(1),1)/2+0.5;%random weight to edges 
c{1} = cat(2,m{1},m1); 

for k = 2:no 
     m{k} = randi([(k-1)*n(k-1)+1 k*n(k)],n(k),2);%random links between nodes of group k 
     m1 = rand(n(k),1)/2+0.5; 
     c{k} = cat(2,m{k,1},m1); 
end 
c=cat(1,c{:}); 

這個循環是量化的,或者至少你可以避免使用細胞,這應該提高一點速度。

+0

非常感謝您的回答。 – Fatime 2013-04-27 16:22:40