2017-02-10 140 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

相关问题