Preallocate variables with unkown size
    3 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
    Waseem AL Aqqad
 le 23 Mai 2022
  
    
    
    
    
    Modifié(e) : Waseem AL Aqqad
 le 25 Mai 2022
            I pre allocate the two variables phi and phiPrime by setting a maximum size and then crop them afterwards. The thing is that both of them depend on vector b which changes its size in every ii. 
I did something like the following but not sure if it is quite correct and computational effective.
but I'm not sure whether the way I preallocated the variables lead into wrong results or not. 
function [G_dmg, G_orig, phic, inActiveSorted] =  SH_decision(G_dmg, G_orig, phic)
N = numnodes(G_dmg); 
inActive = find(degree(G_dmg)==0); 
impact = -1* ones(1,length(inActive)); 
phi = zeros(N, 1); 
phiPrime = zeros(N, 1); 
phidPrime = zeros(N, 1); 
lastIdx = 0;
numNeighborsPernode = []; 
activeNeighbors = []; 
for ii = 1:length(inActive)     
    b = neighbors(G_orig, inActive(ii));
    if ~isempty (b) 
        degreeOrig = degree(G_orig, b); 
        degreeDmg = degree(G_dmg, b); 
        phi(lastIdx + 1: length(b)+lastIdx) = degreeDmg./degreeOrig;  
        phiPrime(lastIdx + 1: length(b)+lastIdx) = degreeRestoration./degreeOrig ; 
        impact(ii) = nnz(phi(lastIdx + 1: length(b)+lastIdx)<=phi & phiP(lastIdx + 1: length(b)+lastIdx)>phi);
        phidPrime = phiPrime - phi;
        lastIdx = lastIdx + length(b);
    end
end
phi = phi(1:lastIdx, :);
phiPrime = phiPrime(1:lastIdx, :);
phidPrime = phidPrime(1:lastIdx, :);
end
2 commentaires
  KSSV
      
      
 le 23 Mai 2022
				Is phi and phiPrime are vectors at the end? 
Why you are using (lastIdx + 1: length(b)+lastIdx) as the index while saving inside loop? 
Réponse acceptée
  Bruno Luong
      
      
 le 23 Mai 2022
        
      Modifié(e) : Bruno Luong
      
      
 le 23 Mai 2022
  
      You can compute exactly the size needed for your vectors
A = G_orig.adjacency;
A(inActive,:) = 0;
m = nnz(A(:,inActive));
phi = zeros(m, 1);
phiPrime = zeros(m, 1);
...
13 commentaires
Plus de réponses (0)
Voir également
Catégories
				En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


