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

5

对于由 '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个回答

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

5

这是比所有发布的内容都要短的一行代码,它只需要一行就能完成。

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

输出:

idx =

     5     6     2

编辑:刚刚意识到您可以进行如下操作:
[~,idx] = max(A(:,any(A)))

这并没有告诉我们 idx 中的元素属于哪一列。 - Chenming Zhang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接