【问题标题】:Matlab: Find row indice of first occurrence for each column of matrix (without using loops)Matlab:为矩阵的每一列查找第一次出现的行索引(不使用循环)
【发布时间】:2013-03-20 23:03:08
【问题描述】:

对于由“0”和“1”组成的矩阵 A 的每一列,如果存在,我想找到“1”第一次出现的列索引。例如,如果 A 被定义为:

 A=[0 0 0 0;
 0 0 0 1;
 0 0 0 0;
 0 0 0 1;
 1 0 0 0;
 0 1 0 1;
 1 1 0 0]

那么结果将是:

b=[5 6 2]

我正在寻找一个没有任何“for”或“while”循环的解决方案。

我想出了一个解决方案:

 [b,~]=find(cumsum(cumsum(A))==1)

有没有更优雅的方法来做到这一点?

【问题讨论】:

    标签: matlab matrix find indices last-occurrence


    【解决方案1】:

    @Nacer - 不错的答案。默认情况下 [a,m,c] = unique(J) 返回向量 m 以索引 J 中每个唯一值的最后次出现。请改用 [~,m] = unique(J, 'first');

    [I,J] = find(A==1);
    [~,m] = unique(J, 'first');
    I(m)
    
    ans =    
         5
         6
         2
    

    【讨论】:

      【解决方案2】:

      这比发布的任何内容都短,而且是单行的。 代码:

      [~,idx] = max(A(:,sum(A)>0));
      

      输出:

      idx =
      
           5     6     2
      

      编辑:刚刚意识到你可以做到:

      [~,idx] = max(A(:,any(A)))
      

      【讨论】:

      • 这并不能说明idx中的元素属于哪一列
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      相关资源
      最近更新 更多