1

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

?

4

3 回答 3

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将有一个0wherex并且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
于 2012-08-08T17:13:59.530 回答
2

你可以写:

idx = any([x;y]);

甚至更好

idx = x|y;

然后应用逻辑索引来选择元素:

x2 = x(idx)
y2 = y(idx)
于 2012-08-08T17:47:36.670 回答
0

使用逻辑索引、仅添加和就地修改的正数的紧凑替代方案:

idx = ~(x+y);
x(idx)=[];
y(idx)=[];

编辑:对于有符号整数,两个数组中的相应元素可能加起来为零,您可以避免==or~=比较

idx = ~(abs(x)+abs(y))
于 2012-08-10T19:06:27.950 回答