Parfor loop variable cannot be classified
15 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
Jill Reese
2014 年 8 月 11 日
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 件のコメント
その他の回答 (1 件)
Quentin
2014 年 8 月 11 日
編集済み: Walter Roberson
2016 年 4 月 7 日
1 件のコメント
Khalid
2016 年 4 月 7 日
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
参考
カテゴリ
Help Center および File Exchange で Boundary Conditions についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!