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には0wherexyがあり、両方ともゼロであり、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)=[];

編集: 2 つの配列の対応する要素の合計がゼロになる可能性がある符号付き整数の場合、==またはの~=比較 を回避できます。

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