2017-08-06 8 views
1

私の質問はかなり簡単なはずですが、それを動作させることはできません。 論理演算子を使用してそれらの行のみを格納することによって、関連する行のみを行列から取り出したいと考えています。 私は他の言語でforループを使ってこれを行うのに慣れていましたが、Matlabでは配列や行列全体を一度に実行する方が速くなければなりません。アレイ上のMatlab論理演算

これは私がうまくいくはずの例ですが、私の似たような試みはすべて異なるエラーを生成し、何をすべきか分かりません。

Mrelevant = Matrix(Matrix.no_refs > 100) 

編集:マトリックスは、実際にヘッダを持つテーブルで、ヘッダー「no_refs」は列の値が100

の上に私べきであるように私には、一定の要件を満たす行だけを維持したいですこれが十分にクリアであることを祈って、感謝!

+2

参照してください:[mcve] – excaza

+2

明らかに 'Matrix'は行列ではなく、何らかの型の構造体です。サンプル 'Matrix'を作成するためのコードと、このデータに期待する出力を加えてください。 – beaker

+0

ここに例を示します:https://stackoverflow.com/questions/45526311/find-the-largest-value-in-a-column/45526702#45526702 – EBH

答えて

2

Matrixtableであることを指定したので、答えは明らかです。あなたが選択されている特定の行のすべての変数が含まれるように、追加のcolonインデックス引数を忘れてしまった:

Mrelevant = Matrix(Matrix.no_refs > 100, :); 

これはあなたにno_refs変数が100以上であるMatrixからの行のみを含む新しいテーブルMrelevantを与えるだろう。行および/または変数によってtableのデータにアクセスするすべての方法については、hereを参照してください。

0

no_refsの目的が何であるか分かりませんが、ここに表示されている構文はうまくいくはずです。正しい構文は次のとおりです。

Mrelevant = matrixName(matrixName > 100) 

ただし、条件を満たす値を含む単一の列が作成されます。例えば、

testMatrix = 
0.8147 0.0975 0.1576 0.1419 0.6557 
0.9058 0.2785 0.9706 0.4218 0.0357 
0.1270 0.5469 0.9572 0.9157 0.8491 
0.9134 0.9575 0.4854 0.7922 0.9340 
0.6324 0.9649 0.8003 0.9595 0.6787 

relevant = testMatrix(testMatrix > .5) 

relevant = 
0.8147 
0.9058 
0.9134 
0.6324 
0.5469 
0.9575 
0.9649 
0.9706 
0.9572 
0.8003 
0.9157 
0.7922 
0.9595 
0.6557 
0.8491 
0.9340 
0.6787 

はしかし、あなたは論理演算子を使用して、それらの行が

あなたはすべての要素のみの行を格納意味ですか を格納することにより

のみ関連する行と言うとき行には条件を満たしている?その場合、構文は

relevant = testMatrix 
% Delete all rows that don't meet the requirement 
relevant(any(relevant<=100, 2),:) = []; 

になります。これは、要件を満たさない値を含む行を単に消去します。

+0

マトリックスインデックスが削除の範囲外です。 _それはなぜ事実だろうか何か手がかり? –

+0

特定のマトリックスが正しく形成されなかった可能性があります。エラーが発生した時点でコマンドラインやスクリプトを投稿できたら、それをさらにデバッグする手助けができます。 –