如何在MATLAB的每一行中找到第一个'1'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在MATLAB的每一行中找到第一个'1'相关的知识,希望对你有一定的参考价值。

我有一个矩阵,

A = [ 0 0 0 0 0 0 1 1 1 1 0 0; 0 0 0 0 0 1 1 1 1 0 0 0; 0 0 0 0 0 0 1 1 1 1 0 0]

我的问题是,如何在每一行中找到第一个'1'。我想输出将显示如下:

B = [7; 6; 7]

这意味着,对于第一行,在第7列中找到数字1,在第6列中找到第二行,依此类推。

答案

你可以使用max的第二个输出,它给出了最大值的位置:

v = 1; % desired value
[~, B] = max(A==v, [], 2); % position of maxima along the second dimension

作为奖励,如果可以存在不包含所需值的行,则可以为这些行输出0,如下所示:

[m, B] = max(A==v, [], 2);
B = B.*m;
另一答案

找到cumulative sum每行的A并使用find获取1的行和列下标,然后根据行排序列下标以获得所需的矩阵B

[rind,cind] = find(cumsum(A,2)==1);
[~, rind] = unique(rind);
B = cind(rind);

以上是关于如何在MATLAB的每一行中找到第一个'1'的主要内容,如果未能解决你的问题,请参考以下文章

如何将函数应用于 MATLAB 中矩阵的每一行/列?

Matlab - 如何对两个矩阵之间的每一行执行操作?

如何将给定矩阵的每一行中的所有元素与给定向量的相应元素相乘并在 MATLAB 中求和?

如何在matlab中读取TXT数据文件

如何在gridPanel中的每一行添加一个按钮

matlab如何提取矩阵中的每一列作为新的变量