2017-02-10 174 views
0

我有單元陣列:如何替換滿足條件的數組的所有元素?

im = {'A+','B-','B+','A+'; 'A-','B-', NaN, 'A+'}; 

欲循環通過每一行以查看哪些具有的兩個和「A」和'B的等於2。然後,我將替換這些行與NaN的。我的代碼:

for ii = 1: size(im,1) 
    if (sum(strcmp('A+', im), 2) + sum(strcmp('A-', im), 2)) == 2 & (sum(strcmp('B+', im), 2) + sum(strcmp('B-', im), 2))== 2 

    im{ii, 1} = NaN; 
    im{ii, 2} = NaN; 
    im{ii, 3} = NaN; 
    im{ii, 4} = NaN;  
    end 
end 

當我刪除從im第二排,我得到的答案:im = {NaN, NaN, NaN, NaN}。但是,當我包括第二排時,im保持原樣。請問,我的代碼可能有什麼問題?其次,是否有更好的方法來取代元素?

任何幫助或建議,請?非常感謝。

+0

既然你不告訴MATLAB什麼的情況下,總和辦對於A和B兩者都不是2,它會使其保持不變,就像你正在觀察的那樣。你可以在你的循環中添加一個'elseif'語句來處理這種情況。 –

+1

要修復你的代碼,改變這樣的條件:'if sum(strcmp('A +',im(ii,:)))+ .. ..' –

回答

0

您的代碼不起作用,因爲在if語句中,您正在檢查整個單元格中的總和,而不是單個行中的總和。你應該使用這樣的事情:

if (sum(strcmp('A+', im(ii,:)), 2) + sum(strcmp('A-', im(ii,:)), 2)) == 2 & (sum(strcmp('B+', im(ii,:)), 2) + sum(strcmp('B-', im(ii,:)), 2))== 2 

Additionaly,你可以改變你的下一個四行一個一個這樣的:

im(ii,:) = {NaN} 
+0

非常感謝大家。非常感謝... – User1772

相關問題