如何在相同维度的另一个矩阵取值为1后删除矩阵中的整行

时间:2017-07-26 02:05:40

标签: matlab matrix

假设我有两个矩阵:

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

B = [20 15 25 30 40;
     12 15 25 38 24;
     50 23 37 21 19;
      7 20 89 31 41;
     12 13 45 21 31]

如何在A中第一次出现一个B nan行中的所有条目。在这种情况下,我希望输出为:

B = [20 15 25 30 Nan;
     12 15 25 Nan Nan;
     Nan Nan Nan Nan Nan;
     7 20 89 31 41;
     12 13 Nan Nan Nan]

提前谢谢

3 个答案:

答案 0 :(得分:6)

您可以使用cummaxcumsum和逻辑索引将值设置为NaN:

B(logical(cumsum(A,2)))=NaN;

B(logical(cummax(A,2)))=NaN;

答案 1 :(得分:1)

一个简单的解决方案可以从循环中使用来考虑每一行:

 for idx = 1 : size(B,1)
     foundOne = find(A(idx,:) == 1);
     B(idx, foundOne:end) = NaN;
 end 

答案 2 :(得分:-2)

你想把NaN放在B中A中有1的地方。只需一步就可以实现。

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

B = [20 15 25 30 40;
     12 15 25 38 24;
     50 23 37 21 19;
      7 20 89 31 41;
     12 13 45 21 31] ;


 B(A==1) = NaN ;