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)
有没有更优雅的方式来做到这一点?
@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)
这比任何张贴的都要短,而且是一个班轮.码:
[~,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)