MATLABはマトリックスから特定のゼロのみを削除します

先頭や末尾のゼロを削除する方法や、ベクトルや行列からすべてのゼロを削除する方法については、たくさんの回答がありました。私がしなければならないことは、それらのいくつかを削除するだけです。私は2つの行列を持っています、そして、私は両方がゼロであるエントリを削除したいだけです。それらは特性を使って解決された2次元のx座標とy座標であり(必要に応じて詳細を与えることができます)、両方の行列が同じインデックスにゼロを含む値を削除したいだけです。私は簡単にベクトルにベクトルを変換し、ベクトルで作業することができますので、いずれの場合にも助けてくれれば幸いです。

1
それが問題のポイントです。私はdx/ds = u、dy/dx = v、dc/ds = - \ theta g(c)を解いているので、2D補間を使っているので、パラメータ化に沿ってuとvの値を得て、 y値は前方オイラーを使用します。ただし、xとyベクトルの要素数は開始点ごとに変わります。指定された行に割り当てられていない余分なスペースには、0の値が与えられます。しかし、私はc(0,0)= 0を意味するたくさんのエントリを取得するのに対し、(x、y)=(0,0)でc = 2としたいので、c 、0)= 0となる。私は以下の両方の方法を試して、どちらが最善であるかを見ていきます。ありがとう。
追加された 著者 Jeff,
どのように2Dマトリックスの中から要素を取り除くことを提案しますか?
追加された 著者 Oliver Charlesworth,

1 答え

For the sake of simplicity, let's assume you're using vectors called X and Y (of the same length), and you want to remove only those entries where both vectors are zero. Here's how (not tested):

% Find the indexes where either X or Y is different from zero
% (these are the indexes of the components we want to keep)
I = find(X~=0 | Y~=0);

% Select the desired components from X and Y
X=X(I);
Y=Y(I);

Edit: As Oli has pointed out below (and stefano explained further), you should use logical indexing for better performance.

5
追加された
@MartinB - 主な利点は、 find 関数を省略したことです。これはしばしばコードの実行を容易にします。
追加された 著者 eykanal,
助けてくれてありがとう、みんな。 Oliが論理インデックスを使用して提案したものを使用しましたが、それは素晴らしいことです。本当にありがとう。
追加された 著者 Jeff,
クリーナーは次のとおりです。 I =(X == 0&Y == 0); X(I)= [];論理インデックスを使用してY(I)= [];
追加された 著者 Oliver Charlesworth,
@オルリー:正直に好奇心 - どのようにこのクリーナー、つまり利点は何ですか?
追加された 著者 Martin B,
@stefano:ありがとう - これを知らなかった!
追加された 著者 Martin B,
@MartinB - クリーナーだけでなく、X(find(Y == something))をタイプすると、matlabエディターは、「find」関数を削除して、「パフォーマンスを向上させるには、論理インデックスを使用するFINDの代わりに "
追加された 著者 stefano,