2017-04-02 125 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或为空。你有任何其他选择吗? –