如何替换满足条件的数组的所有元素?
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}
我有元胞数组:
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}