从两个数组matlab中删除零条目

时间:2012-08-08 17:03:13

标签: arrays matlab

如何在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]

3 个答案:

答案 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)

数组idx0,其中xy均为零,否则为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))