2017-04-02 12 views
0

Iは、間隔1に向かう第3列の値を持つN×3行列(二重)を有します。この行列は「データ」として保存され、同じ名前でこのフィルタリングを行った後でさらに分析するために使用されます。フィルタ行列の列/行のデータをMATLAB

いくつかの条件で行を並べ替えるにはどうしたらいいですか?例えば、数字1と3(または1と2、1と2と4、または3つだけなど)?

無効な入力(たとえば、入力が空であるか '6'のような無効な番号、 '1'、 '2'、 '7'のフィルタリングのような誤った入力の組み合わせなど) ')、ユーザーが入力を再試行できるようにします。

私はmatlabを使用しています。


行列はIこれは仕事ができるこの

42.34 0.73713 1 
25.387 0.8774 1 
57.187 0.388 2 
37.458 0.7095 2 
34.227 0.6929 2 
47.837 0.61363 2 
30.852 0.65929 2 
51.329 0.50498 3 
29.501 0.77894 3 
34.895 0.80504 3 
26.243 0.73048 3 
22.311 0.65362 3 
14.769 0.17958 4 
17.326 0.23037 4 
41.557 0.38979 4 

答えて

0

のようになります。入力は、あなたがあなたの質問に記載されているようにロードされた任意の行列に対する行列の定義を変更することができます[1 2]または[1:3]

filter=[]; 

while isempty(filter) || ~isvector(filter) || ischar(filter) 
    filter=input('Enter rows to filter: ') 
end 

index=[]; 

m=[[42.34 0.73713 1]; 
[25.387 0.8774 1]; 
[57.187 0.388 2]; 
[37.458 0.7095 2]; 
[34.227 0.6929 2]; 
[47.837 0.61363 2]; 
[30.852 0.65929 2]; 
[51.329 0.50498 3]; 
[29.501 0.77894 3]; 
[34.895 0.80504 3]; 
[26.243 0.73048 3]; 
[22.311 0.65362 3]; 
[14.769 0.17958 4]; 
[17.326 0.23037 4]; 
[41.557 0.38979 4]] 

for i=1:numel(filter) 
    index=[index find(m(:,3)==filter(i))']; 
end 

m2=m(index,:) 

、たとえば1のために、数またはベクトルである可能性があります。

+0

答えをいただきありがとうございます。本当に良い選択ですが、間違った入力をどのように処理しますか? – ElCapitain

+0

フィルタがベクトルでないか、charであるか空である場合にユーザに値を尋ねるために、少し調整しました。あなたは他の選択肢も考えていますか? –