0

私はMatlabで5列と数百万行の行列を扱っています。このデータの特定のグループを選択することに興味があります。現在、plot3() とブラシ/選択データ ツールを使用してこれを行っています。

マトリックスの最初の 3 列を X、Y、Z としてプロットし、関心のあるマトリックス領域を強調表示します。次に、ブラシ/選択ツールの [変数の作成] ツールを使用して、その領域を新しいマトリックスとしてエクスポートします。

問題は、それを行うと、元のより大きな行列の残りの 2 つの列が削除されることです。理由はわかります-それらはプロットされていないため、図ツールはそれらについて認識していません。ただし、処理パイプラインを続行するには、そのサブリージョンの 5 つの列すべてが必要です。

恐ろしいネストされた if ループ アプローチを使用して、適切な 4 番目と 5 番目の列の値をエクスポートされたマトリックスに追加しています。元のマトリックスとエクスポートされたマトリックスの両方で列 1、2、3 が一致する場合は、元のマトリックスの列 4/5 を1つをエクスポートしました。設計が悪く、ひどく遅いです。これにはMatlab関数/トリックが必要であることを知っています-誰か助けてくれますか?

ありがとう!

これは役立つかもしれません:

1.  I start with matrix 1 with columns X,Y,Z,A,B
2.  Using the brush/select tool, I create a new (subregion) matrix 2 with columns X,Y,Z
3.  I then loop through all members of matrix 2 against all members of matrix 1.  If X,Y,Z match for a pair of rows, I append A and B
from that row in matrix 1 to the appropriate row in matrix 2.
4.  I become very sad as this takes forever and shows my ignorance of Matlab.
4

1 に答える 1

0

あなたの状況を正しく理解していれば、簡単な方法があります。

次のような行列があると仮定しますM = [A B C D E]。各文字は Nx1 ベクトルです。

範囲を選択すると、この部分はよくわかりませんが、次のように作成できるとします。

idxAidxBおよびidxC、それらが領域内にある場合は 1、それ以外の場合は 0 です。

次に、次のように簡単に使用できます。

M(idxA&idxB&idxC,:)

追加の 2 つの列も取得します。

于 2013-02-27T21:32:53.373 に答える