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

Mik*_*ger 5 matlab matrix find last-occurrence indices

对于由'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]
Run Code Online (Sandbox Code Playgroud)

那么结果将是:

b=[5 6 2]
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个没有'for'或'while'循环的解决方案.

我想出了一个解决方案:

 [b,~]=find(cumsum(cumsum(A))==1)
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*xey 5

@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
Run Code Online (Sandbox Code Playgroud)


Jus*_*tin 5

这比任何张贴的都要短,而且是一个班轮.码:

[~,idx] = max(A(:,sum(A)>0));
Run Code Online (Sandbox Code Playgroud)

输出:

idx =

     5     6     2
Run Code Online (Sandbox Code Playgroud)

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

[~,idx] = max(A(:,any(A)))
Run Code Online (Sandbox Code Playgroud)