2017-07-26 64 views
1

假設值我有兩個矩陣:如何刪除整個行中的相同尺寸的另一個矩陣後的矩陣取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中楠一行第一次1出現在A.在這種情況下,我想輸出是:

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] 

預先感謝您

回答

1

一個簡單的解決方案可以從循環使用來考慮每一行:

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

您可以使用cummaxcumsum和邏輯索引的值設置爲NaN:

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

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

要放置的NaN的B中,其中有1 A.它可以簡單地通過一步來實現。

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 ; 
+4

這是不正確的。仔細查看所需的B'矩陣。它不符合您的解決方案。看看每一行,只要遇到'1',那個位置和行**的其餘部分就應該設置爲'NaN'。 – rayryeng