Matlab:查找每列矩阵的第一次出现的行索引(不使用循环)

时间:2013-03-30 09:18:06

标签: matlab matrix find indices last-occurrence

对于由'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)

有更优雅的方法吗?

2 个答案:

答案 0 :(得分:5)

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

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

ans =    
     5
     6
     2

答案 1 :(得分:5)

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

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

输出:

idx =

     5     6     2
编辑:刚认识到你能做到:

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