How to choose identical values in a cell array with constraints using Matlab?

后端 未结 1 478
一向
一向 2021-01-17 04:04

If I have a 4x1 Cell structure with that represents a=[A1 A2 A3 A4] :

a=cell(4,1)
a{1}=[1 3 1 0]
a{2}=[3 3 3 3]
a{3}=[3 2 3 2]
a{4}=[3 3 3 2]

         


        
相关标签:
1条回答
  • 2021-01-17 04:23

    This may not be an elegant answer, but it is effective:

    %The input cell array.
    a = cell(4,1);
    a{1} = [1 3 1 0];
    a{2} = [3 3 3 3];
    a{3} = [3 2 3 2];
    a{4} = [3 3 3 2];
    
    %The input priority array.
    B = [1 1 1 2];
    
    %The output cell array: preallocated for efficiency.
    c = cell(size(a));
    
    j = 1;
    for i = 1:size(a,1)
    %For each i
        if(all(((cell2mat(a(i))==3)&(B==1))==(B==1)))
        %"cell2mat" converts the cell arrays into easily comparable number arrays.
        %"X==Y" for matrices of the same size, will give you a result matrix of the same size with 1 where the values are equal and 0 elsewhere.
        %Thus, "cell2mat(a(i))==3" would compare the number matrices represented by "a{i}" with "3".
        %"(cell2mat(a(i))==3)&(B==1)" would do a logical AND operation with "B==1", that is, "[1 1 1 0]".
        %In short, since you want whereever "a{i}" is 3 when "B" is 1, we want those "a{i}" where the comparison stated above is the same as "B==1".
        %If the result array is the same as "B=1", we get "[1 1 1 1]" as the result of the comparison "((cell2mat(a(i))==3)&(B==1))==(B==1)".
        %The function "all" checks whether the input to it is completely non-zero: here if we get a "[1 1 1 1]" "all" will give us 1, else 0.
            c{j} = a{i};
            %Insert result array into "c" when condition is satisfied.
    
            j = j + 1;
            %Increment the index of "c".
        end
    end
    
    
    c = c(1:j-1);
    %Truncate unused rows of "c".
    
    cell2mat(c)
    %Displays the value of "c" as computed.
    
    0 讨论(0)
提交回复
热议问题