简体   繁体   中英

How can I find the nonzero values in a MATLAB cells array?

The following code generates an cell array Index [1x29], where each cell is an array [29x6]:

for i = 1 : size(P1_cell,1)
    
    for j = 1 : size(P1_cell,2)

        [Lia,Lib] = ismember(P1_cell{i,j},PATTERNS_FOR_ERANOS_cell{1},'rows'); 
        Index1(i,j) = Lib  % 29x6

    end

    Index{i} = Index1; % 1x29
end

How can I find the nonzero values in Index array?, ie generate an array with the number of non-zero values in each row of the Index1 array. I tried the following loop, but it doesn't work, it creates conflict with the previous one:

for i = 1 : length(Index)
                    
    for j = 1 : length(Index)
    
        Non_ceros = length(find(Index{:,i}(j,:))); %%  I just need the length of the find function output
            
    end
end

I need help, Thanks in advance.

The nnz() (number of non-zeros) function can be used to evaluate the number of non-zero elements. To obtain the specific positive values you can index the array by using the indices returned by the find() function. I used some random test data but it should work for 29 by 6 sized arrays as well.

%Random test data%
Index{1} = [5 2 3 0 zeros(1,25)];
Index{2} = [9 2 3 1 zeros(1,25)];
Index{3} = [5 5 5 5 zeros(1,25)];


%Initializing and array to count the number of zeroes%
Non_Zero_Counts = zeros(length(Index),1);
 

for Row_Index = 1: length(Index)
    %Evaluating the number of positive values%
    Array = Index{Row_Index};
    Non_Zero_Counts(Row_Index) = nnz(Array);

    %Retrieving the positive values%  
    Positive_Indices = find(Array);
    PositiveElements{Row_Index} = Array(Positive_Indices);
   
    disp(Non_Zero_Counts(Row_Index) + " Non-Zero Elements ");
    disp(PositiveElements{Row_Index});
end

Ran using MATLAB R2019b

 for i = 1 : length(Index)
     for j = 1 : length(Index)        
         Non_ceros(i,j) = nnz(Index{:,i}(j,:));
     end       
 end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM