How to classify a matrix within a Matlab parfor loop?

元气小坏坏 提交于 2019-12-12 02:46:39

问题


I am looking to classify the values of a matrix. The following example works outside of a parfor loop, however it does not work when used within a parfor loop. What are my options to classify matrices, following the provided example, within a parfor loop?

% Sample data
Imag1 = [ 62  41 169 118 210;
         133 158  96 149 110;
         211 200  84 194  29;
         209  16  15 146  28;
          95 144  13 249 170];

% Perform the classification
Imag1(find(Imag1 <= 130)) = 4;
Imag1(find(Imag1 >= 150)) = 1;
Imag1(find(Imag1 >  140)) = 2;
Imag1(find(Imag1 >  130)) = 3;

Results in the following (outside parfor loop):

Imag1 =

    62    41   169   118   210
   133   158    96   149   110
   211   200    84   194    29
   209    16    15   146    28
    95   144    13   249   170

Imag1 =

   4   4   1   4   1
   3   1   4   2   4
   1   1   4   1   4
   1   4   4   2   4
   4   2   4   1   1

回答1:


You can use another matrix to store the result.

Imag2 = zeros(size(Imag1));

% Perform the classification
Imag2(find(Imag1 <= 130)) = 4;
Imag2(find(Imag1 >= 150)) = 1;
Imag2(find(Imag1 >  140)) = 2;
Imag2(find(Imag1 >  130)) = 3;

so you can use a parfor loop somehow. Since parfor doesn't care about order of execution. Your code doesn't work in a parfor loop because right now you are modifying the values of Imag1, then comparing those values again, aka any loop iteration would be be dependent on the prior loop iterations




回答2:


Here's another approach:

parfor c = 1:size(Imag1,2)
   Imag2(:,c) = 4-min(ceil(max((Imag1(:,c) - 130),0)/10),3);
end

Now you can split it up however you like; by rows, by columns, by blocks, by alternate columns...

Edit: Unfortunately this classifies a value of 150 as 2. So you probably shouldn't use this one.


Take 3

class = [150 141 131 0]; %// minimum values for class 1, 2, 3, 4
[m, n] = size(Imag1);
parfor c=1:n
   for r=1:m
      Imag3(r,c) = find(Imag1(r,c) >= class, 1);
   end
end


来源:https://stackoverflow.com/questions/29953250/how-to-classify-a-matrix-within-a-matlab-parfor-loop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!