Why aren't my variables the same dimension?
    2 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Shannon
 am 4 Aug. 2015
  
    
    
    
    
    Kommentiert: Shannon
 am 7 Aug. 2015
            Hi All,
I was hoping a new pair of eyes could find what is wrong with the following code:
    v = landPercent(x1:x2,y1:y2)>80;
    SWNA_S = zeros(length(time),1);
    for i = 1:length(time);
    nonZero = nonzeros(v.*pr(x1:x2,y1:y2,i));
    Area = nonzeros(v.*areacell(x1:x2,y1:y2));
    sumArea = sum(Area);
    prArea = Area .* nonZero;
    sum_prArea = sum(prArea);
    SWNA_S(i) = sum_prArea/sumArea;
    end
For some reason the nonZero and Area variables are different dimensions at i=425. I tried putting an index for Area: Area = nonzeros(v.*areacell(x1:x2,y1:y2,i)); But then it says that the index exceeds the matrix dimension. I think I'm on the right path with that approach, but wonder if anyone could help me figure out how to put the correct index in that doesn't exceed the matrix dimensions?
Thanks.
3 Kommentare
  Walter Roberson
      
      
 am 4 Aug. 2015
				The nonzeros() selects for nonzero values. Your code is assuming that the zeros come only from v, but if that is not true, if there is a 0 in pr, then there would be fewer nonzeros() for that layer than you expect. The code I suggest handles it a different way, by using v as a logical index.
Akzeptierte Antwort
  Walter Roberson
      
      
 am 4 Aug. 2015
        pr(x1:x2,y1:y2,425) contains a 0 in a position where v is true. In the iterations before that, that was not true.
With the extra 0, the nonzeros of the multiplication are different than the nonzero of the areacell.
To repair this:
before the loop calculate
areaxy = areacell(x1:x2,y1:y2);
Area = areaxy(v);
sumArea = sum(Area);
and inside the loop,
pri = pr(x1:x2,y1:y2,i);
nonZero = pri(v);
There is no need to recalculate Area or sumArea inside the loop as you do not change the array and you do not change the indices.
Weitere Antworten (0)
Siehe auch
Kategorien
				Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

