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

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となる。私は以下の両方の方法を試して、どちらが最善であるかを見ていきます。ありがとう。

どのように2Dマトリックスの中から要素を取り除くことを提案しますか？

## 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 `関数を省略したことです。これはしばしばコードの実行を容易にします。

クリーナーは次のとおりです。` I =（X == 0＆Y == 0）; X（I）= [];論理インデックスを使用してY（I）= []; `

@オルリー：正直に好奇心 - どのようにこのクリーナー、つまり利点は何ですか？

@stefano：ありがとう - これを知らなかった！

@MartinB - クリーナーだけでなく、X（find（Y == something））をタイプすると、matlabエディターは、「find」関数を削除して、「パフォーマンスを向上させるには、論理インデックスを使用するFINDの代わりに "