假设我有两个矩阵:
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]
提前谢谢
答案 0 :(得分:6)
您可以使用cummax
或cumsum
和逻辑索引将值设置为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 ;