Can't apply an IF function with 100000*1 matrix
    7 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
Hi! I built this code:
if A1 <0
    D = 0.8;
elseif A2 <0
    D = 0.7;
elseif A3 <0
    D = 0.6;
elseif A4 <0
    D = 0.5;
else
    D = 0.3;
end
My problem is that A1, A2, A3 and A4 are 100000x1 matrixes from Monte Carlo Simulations so I would expect D to be 100000x1 too. Instead I get a flat value like 0.8. What I am doing wrong? The strange part is that it works when test with a 5x1 matrix. Thanks a lot.
0 Commenti
Risposta accettata
  James Tursa
      
      
 il 4 Giu 2015
        
      Modificato: James Tursa
      
      
 il 4 Giu 2015
  
      To make your code work, wrap a loop around it. E.g.,
D = zeros(size(A1));
n = numel(D);
for k=1:n
    if A1(k) <0
        D(k) = 0.8;
    elseif A2(k) <0
        D(k) = 0.7;
    elseif A3(k) <0
        D(k) = 0.6;
    elseif A4(k) <0
        D(k) = 0.5;
    else
        D(k) = 0.3;
    end 
end
Or perhaps you might use a vectorized approach. E.g.:
D = 0.3 * ones(size(A1));
D(A4<0) = 0.5;
D(A3<0) = 0.6;
D(A2<0) = 0.7;
D(A1<0) = 0.8;
Più risposte (1)
  Kelly Kearney
      
 il 4 Giu 2015
        When applied to a vector, if x < 0 is the same as if all(x < 0). It doesn't iterate over the vector, and therefore it returns the single scalar value that you assign.
You need to either loop over all the values, or use logical indexing instead:
D = ones(size(A1)) * 0.3;
D(A1 < 0) = 0.8;
D(A1 >= 0 & A2 < 0) = 0.6;
D(A1 >= 0 & A2 >= 0 & A3 < 0) = 0.4;
D(A1 >= 0 & A2 >= 0 & A3 >= 0 & A4 < 0) = 0.5;
0 Commenti
Vedere anche
Categorie
				Scopri di più su Repeated Measures and MANOVA in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

