如何替换满足条件的数组的所有元素?

How do i replace all elements of an array that satisfy a condition?

我有元胞数组:

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 保持原样。请问,我的代码可能有什么问题?其次,有没有更好的替换元素的方法?

有什么帮助或建议吗???非常感谢。

您的代码不起作用,因为在 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

此外,您可以像这样将接下来的四行更改为一行:

im(ii,:) = {NaN}