Таблица Matlab - поиск и выделение значений в таблице - PullRequest
1 голос
/ 07 марта 2019

Я пытаюсь выделить данные в таблице на основе пользовательского ввода. У меня ниже-

sex=input("please input the gender (M/F): ", 's');
sysbp= input("enter styloic blood pressure: ");
diabp= input("enter dystolic blood pressure: ");


systoliclow=[-inf;-inf;-inf;-inf;-inf;-inf;-inf;-inf;-inf;-inf;
                120;120;120;120;120;120;120;120;120;120;
                130;130;130;130;130;130;130;130;130;130;
                140;140;140;140;140;140;140;140;140;140;
                160;160;160;160;160;160;160;160;160;160]
systolichigh =[119;119;119;119;119;119;119;119;119;119;
                129;129;129;129;129;129;129;129;129;129;
                139;139;139;139;139;139;139;139;139;139;
                159;159;159;159;159;159;159;159;159;159;
                inf;inf;inf;inf;inf;inf;inf;inf;inf;inf]
diastoliclow=[-inf; -inf ; 80; 80 ; 85; 85 ; 90; 90; 100; 100 ;
                -inf; -inf ; 80; 80 ; 85; 85 ; 90; 90;100;100;
                -inf; -inf ; 80; 80 ; 85; 85 ; 90; 90;100;100 ;
                -inf; -inf ; 80; 80 ; 85; 85 ; 90; 90;100;100 ;
                -inf; -inf ; 80; 80 ; 85; 85 ; 90; 90;100;100  ] 
diastolichigh=[79; 79 ;84; 84; 89; 89; 99; 99; inf; inf;
                79; 79 ;84; 84; 89; 89; 99; 99; inf; inf;
                79; 79 ;84; 84; 89; 89; 99; 99; inf; inf
                79; 79 ;84; 84; 89; 89; 99; 99; inf; inf
                79; 79 ;84; 84; 89; 89; 99; 99; inf; inf]
gender={'F' ;'M'; 'F' ;'M'; 'F' ;'M'; 'F' ;'M';'F' ;'M';
        'F' ;'M'; 'F' ;'M'; 'F' ;'M'; 'F' ;'M';'F' ;'M' ;
        'F' ;'M'; 'F' ;'M'; 'F' ;'M'; 'F' ;'M';'F' ;'M';
        'F' ;'M'; 'F' ;'M'; 'F' ;'M'; 'F' ;'M';'F' ;'M';
        'F' ;'M'; 'F' ;'M'; 'F' ;'M'; 'F' ;'M';'F' ;'M' }
values= [-3 ;0; 0 ;0; 0; 1; 2 ;2; 3 ;3; 
          0;0;0;0;0;1;2;2;3;3; 
          0;1;0;1;0;1;2;2;3;3;
          2;2;2;2;2;2;2;2;3;3;
          3;3;3;3;3;3;3;3;3;3]
bpt= table(systoliclow, systolichigh, diastoliclow,diastolichigh, gender, values)


if sysbp>=bpt.systoliclow && sysbp<=bpt.systolichigh && diabp<=bpt.diastoliclow && diap>=bpt.diastolichigh && ismember(sex{'F','M'});

  test = bpt.values

Как мне пройти по таблице, чтобы получить значения, основанные на пользовательском вводе.

Ответы [ 2 ]

2 голосов
/ 07 марта 2019

Вы можете использовать логическое индексирование, циклы не требуются:

isIsolated = sysbp>=bpt.systoliclow & sysbp<=bpt.systolichigh & diabp>=bpt.diastoliclow & diabp<=bpt.diastolichigh & strcmp(bpt.gender,sex);
isolatedTable = bpt(isIsolated,:);

Для входов M, 120 и 85:

>> isolatedTable 

isolatedTable =

  1×6 table

    systoliclow    systolichigh    diastoliclow    diastolichigh    gender    values
    ___________    ____________    ____________    _____________    ______    ______

        120            129              85              89           'M'        1   

Если вас интересует тольков переменной значения :

>> isolatedValues = bpt(isIsolated,end)

isolatedValues =

  2×1 table

    values
    ______

      1   
0 голосов
/ 07 марта 2019

Вы можете запросить строки, которые соответствуют вводу пользователя, и перебрать их идентификаторы:

rows = sysbp>=bpt.systoliclow & sysbp<=bpt.systolichigh & diabp>=bpt.diastoliclow & diabp<=bpt.diastolichigh & strcmp(sex, bpt.gender);

ind = find(rows == 1);

for i=ind
    bpt(i, :)
end

Результат:

ans = 

    systoliclow    systolichigh    diastoliclow    diastolichigh    gender    values
    ___________    ____________    ____________    _____________    ______    ______

    -Inf           119             90              99               'F'       2     
    -Inf           119             90              99               'M'       2     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...