2017-04-02 86 views
0

我有一個N×3的矩陣(雙),第三列的值在間隔1:4,只有這四個值。這個矩陣被保存爲'數據',並且將在用相同名稱過濾之後用於進一步分析。我怎樣才能通過用戶輸入(不彈出)排序行與幾個條件,例如我想篩選行第三列值與數字1和3(或1和2,或1和2和4,或只有3等)?通過用戶輸入矩陣過濾列/行數據-matlab

我還必須注意在無效輸入上顯示錯誤消息(例如,輸入爲空或無效數字,如'6'以及錯誤輸入的組合,例如過濾'1','2'和'7 ')並讓用戶重試輸入。

我正在使用matlab。


矩陣可以是這個樣子

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[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,:) 

您可以更改矩陣定義,你在你的問題表示加載的任何矩陣。

+0

感謝您的回答,它確實是一個不錯的選擇,但您將如何處理不正確的輸入? – ElCapitain

+0

我對代碼進行了一些調整,以便在過濾器不是矢量的情況下向用戶詢問值,或者是char或爲空。你有任何其他選擇嗎? –