Parfor loop variable cannot be classified
    6 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Quentin
      
 am 10 Aug. 2014
  
    
    
    
    
    Bearbeitet: Walter Roberson
      
      
 am 7 Apr. 2016
            Hi all,
I'm just not quite clear why this won't work, or what I can do to fix it.
I get the error
Error: File: LabTracker_Serial_Parralel.m Line: 105 Column: 5
The variable microMovie in a parfor cannot be classified.
See Parallel for Loops in MATLAB, "Overview".
But it would seem to me like each loop is independent of the others. So shouldn't parfor be suitable here?
Any thoughts? Thank you
Here is the code,
microMovie = zeros(NumberOfTargets * pointsToSave, 3, numFrames);
parfor i = 1: numFrames
     [sortedValues,sortIndex] = sort(ghostFrame(:),'descend');
      maxIndex = sortIndex(1:NumberOfFlies * pointsToSave);
      [rowsub, colsub] = ind2sub([size(ghostFrame,1) size(ghostFrame,2)], maxIndex);
      microMovie(:,1,i) = rowsub;
      microMovie(:,2,i) = colsub;
      microMovie(:,3,i) = movieFrame(maxIndex);
end
save('microMovie');
0 Kommentare
Akzeptierte Antwort
  Jill Reese
    
 am 11 Aug. 2014
        The parfor variable classificiation is getting confused by the type of indexing you are performing with the microMovie variable. You can work around this by creating a temporary variable.
parfor i = 1: numFrames
   [sortedValues,sortIndex] = sort(ghostFrame(:),'descend');
    maxIndex = sortIndex(1:NumberOfFlies * pointsToSave);
    [rowsub, colsub] = ind2sub([size(ghostFrame,1) size(ghostFrame,2)], maxIndex);
      % start of modified code
      temp = zeros(NumberOfTargets*pointsToSave,3);
      temp(:,1) = rowsub;
      temp(:,2) = colsub;
      temp(:,3) = movieFrame(maxIndex);
      microMovie(:,:,i) = temp;
  end
0 Kommentare
Weitere Antworten (1)
  Quentin
      
 am 11 Aug. 2014
        
      Bearbeitet: Walter Roberson
      
      
 am 7 Apr. 2016
  
      
      1 Kommentar
  Khalid
 am 7 Apr. 2016
				Old thread, I know, but thought I'd do what I could to answer your second question, as I found Jill's answer to the first question very helpful.
I can't reproduce your second problem; please see your code below with some random initialization of the variables... it runs without error in 8.6.0.267246 (R2015b):
 ghostFrame = rand(1000,1);
 numFrames = 3;
 NumberOfFlies = 10;
 pointsToSave = 5;
 NumberOfTargets = 10;
 microMovie = zeros(NumberOfTargets * pointsToSave, 3, numFrames);
 movieFrame = rand(10*NumberOfTargets * pointsToSave);
 parfor i = 1:numFrames
    [sortedValues,sortIndex] = sort(ghostFrame(:),'descend');
    maxIndex = sortIndex(1:NumberOfFlies * pointsToSave);
    [rowsub, colsub] = ind2sub([size(ghostFrame,1)...
                           size(ghostFrame,2)], maxIndex);
    % start of modified code
    temp = zeros(NumberOfTargets*pointsToSave,3);
    temp(:,1) = rowsub;
    temp(:,2) = colsub;
    temp(:,3) = movieFrame(maxIndex);
    microMovie(:,:,i) = temp;
    for j = 1:2
        some_variable(i,j) = 2*pi;
    end
end
Siehe auch
Kategorien
				Mehr zu Biotech and Pharmaceutical 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!


