我们如何去除matlab中有两个数组的所有零对?从两个阵列中删除零条目matlab
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]
?
我们如何去除matlab中有两个数组的所有零对?从两个阵列中删除零条目matlab
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
其中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
你可以写:
idx = any([x;y]);
甚至更好
idx = x|y;
然后应用逻辑索引选择的元素:
x2 = x(idx)
y2 = y(idx)
为阳性的紧凑型替代方案使用逻辑索引克,另外只和就地修改:
idx = ~(x+y);
x(idx)=[];
y(idx)=[];
编辑:对于有符号整数,其中在两个数组对应的元素可能加起来为零,则可以通过
idx = ~(abs(x)+abs(y))
避免
==
或
~=
比较
如果它们是肯定的(或者同一个符号),它们不能加起来为零。尽管如此,对于一个通用的解决方案,为了避免“〜=”或“==”比较,你可以使用'idx =〜(abs(x)+ abs(y))' – gevang 2012-08-12 01:09:02
并原谅我,但我不擅长matalb,但如果我想迭代这有我的X和我次Y,我怎么可以做for循环? – berndh 2012-08-10 08:19:56