【问题标题】:How can I find the nonzero values in a MATLAB cells array?如何在 MATLAB 单元格数组中找到非零值?
【发布时间】:2021-01-11 21:39:03
【问题描述】:

以下代码生成一个元胞数组索引[1x29],其中每个元胞都是一个数组[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

如何在 Index 数组中找到非零值?即生成一个数组,其中包含 Index1 数组每行中非零值的数量。我尝试了以下循环,但它不起作用,它会与前一个循环产生冲突:

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

我需要帮助,提前致谢。

【问题讨论】:

    标签: arrays matlab


    【解决方案1】:

    nnz()(非零的数量)函数可用于计算非零元素的数量。要获得特定的正值,您可以使用find() 函数返回的索引来索引数组。我使用了一些随机测试数据,但它也适用于 29 x 6 大小的数组。

    %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
    

    使用 MATLAB R2019b 运行

    【讨论】:

    • 您好,谢谢您的回答。我的问题不是找到数组中的所有值,而是按行独立并将这些值存储在数组中。单元格数组索引(1x29)包含我想要的数组索引1(29x6),按行(29)查找非零值的数量。就是 nnz 返回整个数组中所有不为零的值。感谢您的宝贵时间。
    • 为了澄清你想找到每行子数组中非零元素的数量?其中,子数组是存储在 1×29 元胞数组的每个元胞中的 29×6 数组。
    • 如果是这种情况,我们可能需要更详细地说明您希望输出数据/结果数组的格式。
    • 感谢您的重播。我希望它可以通过我使用 nnz() 附加的代码来解决。发生的事情是我的代码的另一部分有错误。谢谢
    【解决方案2】:
     for i = 1 : length(Index)
         for j = 1 : length(Index)        
             Non_ceros(i,j) = nnz(Index{:,i}(j,:));
         end       
     end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 2017-11-08
      • 2016-01-14
      相关资源
      最近更新 更多