对于由'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)
有更优雅的方法吗?
答案 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)))