如何在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]
答案 0 :(得分:3)
使用逻辑索引可以很容易地解决这个问题:
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
,其中x
和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
答案 1 :(得分:2)
你可以写:
idx = any([x;y]);
甚至更好
idx = x|y;
然后应用逻辑索引来选择元素:
x2 = x(idx)
y2 = y(idx)
答案 2 :(得分:0)
使用逻辑索引,仅添加和就地修改的正面的紧凑替代方法:
idx = ~(x+y);
x(idx)=[];
y(idx)=[];
编辑:对于有符号整数,两个数组中的相应元素可能加起来为零,您可以通过
避免==
或~=
比较
idx = ~(abs(x)+abs(y))