我们如何在matlab中删除所有具有2个数组的零对?
x = [0 0 0 1 1 0 5 0 7 0]
y = [0 2 0 1 1 2 5 2 7 0]
这样我们得到
x2 = [0 1 1 0 5 0 7]
y2 = [2 1 1 2 5 2 7]
?
使用逻辑索引可以很容易地解决这个问题:
x = [0 0 0 1 1 0 5 0 7 0]
y = [0 2 0 1 1 2 5 2 7 0]
idx = ~(x==0 & y==0);
x2 = x(idx)
y2 = y(idx)
该数组idx
将有一个0
wherex
并且y
都为零,1
否则。当您使用这样的数组进行索引时,它只会返回索引为 true ( 1
) 的值。
编辑:如果你想迭代它,只需for
在它周围放一个循环。这并不难,但是用模糊的描述我只能给出模糊的代码(或者非常复杂的带有单元格数组的代码,这对于你实际需要的东西来说太复杂了)。
for i = ...
x = % dependent on i
y = % dependent on i
idx = ~(x==0 & y==0);
x2 = x(idx)
y2 = y(idx)
end
你可以写:
idx = any([x;y]);
甚至更好
idx = x|y;
然后应用逻辑索引来选择元素:
x2 = x(idx)
y2 = y(idx)
使用逻辑索引、仅添加和就地修改的正数的紧凑替代方案:
idx = ~(x+y);
x(idx)=[];
y(idx)=[];
编辑:对于有符号整数,两个数组中的相应元素可能加起来为零,您可以避免==
or~=
比较
idx = ~(abs(x)+abs(y))