0
我有单元阵列:如何根据某些标准替换数组中的单元格?
im = {'A+' NaN 'B-'; NaN NaN NaN; NaN 'A+' 'B+'; 'B+' NaN 'A-'; 'B+' NaN NaN; 'B-' 'A-', NaN}
从中我获得:
refPoints = find((any(strcmp('A+', im),2) | any(strcmp('A-', im),2)) & (any(strcmp('B+', im),2) | any(strcmp('B-', im),2)))
其给出:
refPoints = [1;3;4;6]
现在,我想通过im
环路以便无效的点太靠近(比如说1),然后用0替换它们相应的单元格。
在给出的示例中,refPoints 3 and 4
已关闭,因此应该失效。因此,我希望我的最终结果是:
im = {'A+' NaN 'B-'; NaN NaN NaN; NaN NaN NaN; NaN NaN NaN; 'B+' NaN NaN; 'B-' 'A-', NaN}
和
refPoints = [1;6]
我曾尝试下面的代码:
for ii = 1: size(im, 1)-1
if find((any(strcmp('A+', im(ii,:))) | any(strcmp('A-', im(ii,:)))) & (any(strcmp('B+', im(ii,:))) | any(strcmp('B-', im(ii,:)))))==true ...
& find((any(strcmp('A+', im(ii+1,:))) | any(strcmp('A-', im(ii+1,:)))) & (any(strcmp('B+', im(ii+1,:))) | any(strcmp('B-', im(ii+1,:)))))==true
im(ii,:) ={NaN};
end
end
然而,这是预期的第三排,但不第四排。我不知道我在这里做错了什么,但我不知道还有什么要做。
对此非常感谢,有任何帮助,建议或建议吗?先谢谢你。
谢谢@ m7913d。它完美的作品。请你能解释一下这是如何工作的,特别是这个'isPreviousToClose'的东西? – User1772
如果上一行被删除,则'isPreviousToClose'为true。如果当前行与您的标准匹配,则如果前一行关闭(即,“isPreviousToClose”)或下一行将关闭,则该行太靠近。最后一行需要单独的if测试,因为它不在for循环中处理('size(im,1)-1')。 为了更好地理解程序,使用matlab调试器逐步运行代码会很有用。 – m7913d
是的,我明白你的意思了。非常感谢... ...非常感谢... – User1772