Parfor Indexing -- Basic question
    5 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
How do you index into a variable if you dont know the size of the loop?
In the first example below parfor works fine.
 A = 1:10;
  parfor i = 1:length(A)
      tmp = rand(A(i));
     B(i) = tmp(1);
  end
In this example, parfor doesnt work."cannot be run due to the way variable B is used". Such a situation might occur if the case was more complex where B was only assigned an output under certain conditions (IE you dont know the final size of B at the start).
A = 1:10;
B = [];
parfor i = 1:length(A)
    tmp = rand(A(i));
   B(end+1) = tmp(1);
end
also doesnt work:
    A = 1:10;
    B = [];
    cnt = 1;
    parfor i = 1:length(A)
        tmp = rand(A(i));
       B(cnt) = tmp(1);
       cnt = cnt + 1;
     end
Hence my question is, how do you index into B in such a case?
0 Kommentare
Antworten (3)
  Edric Ellis
    
      
 am 25 Okt. 2013
        Here are two ways you could address this. Firstly, using concatenation:
B1 = [];
parfor idx = 1:1000
    x = rand();
    if x > 0.5
        B1 = [B1, x];
    end
end
Or, build B with invalid values and strip them later
B2 = NaN(1, 1000);
parfor idx = 1:1000
    x = rand();
    if x > 0.5
        B2(idx) = x;
    end
end
B2 = B2(~isnan(B2));
  Matlab2010
      
 am 25 Okt. 2013
        1 Kommentar
  Matt J
      
      
 am 25 Okt. 2013
				Yes, you could do that,
   parfor i = 1:1000
      x = rand();
      if x > 0.5
          B{i}.field1=...;
          B{i}.field2=...;
      end
   end
   B=[B{:}];
  Matt J
      
      
 am 25 Okt. 2013
        Or, perhaps you meant something like this
   fields = {'f1','f2','f3','f4'};
   N=length(fields);
   vals=cell(1,N);
   parfor i = 1:N
          switch fields{i}
              case 'f1'   
              vals{i}=1;
              otherwise
                 vals{i}=0;
          end
   end
        args=[fields;vals];
        B=struct(args{:})
0 Kommentare
Siehe auch
Kategorien
				Mehr zu Special Characters 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!


