【问题标题】:How to find first '1' in every row in MATLAB如何在MATLAB的每一行中找到第一个'1'
【发布时间】:2018-01-01 03:20:46
【问题描述】:

我有一个矩阵,

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 列中的第二行,依此类推。

【问题讨论】:

标签: matlab matrix find


【解决方案1】:

可以使用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;

【讨论】:

    【解决方案2】:

    A的每一行中找到cumulative sum,用find得到一个的行列下标,然后将列下标按行排序,得到想要的矩阵B

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

    【讨论】:

      猜你喜欢
      • 2018-08-30
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      • 2014-08-26
      相关资源
      最近更新 更多