2014-02-21 2 views
1

У меня есть на структуру S размера 3x1 где S(1,1)=[209,443,319, 206]S(2,1)=[300,473,1,1]S(3,1)=[305,470,1,1], что я хочу сделать, это оставить только один внутренний-структуру, где S будет размером 1x1 вместо nx1 это структура является один который имеет самые высокие значения в третьем и четвертом столбцах среди других структур. Таким образом, в моем примере S будет иметь только S(1,1), потому что его третий и четвертый столбцы являются самыми высокими среди S (2,1) и S (3,1) со значениями 319,206 по сравнению с 1,1 из S(2,1) и S(3,1), так что S(2,1) и S(3,1) будут удалены и S будет 1x1 struct только с S(1,1). Поэтому, если бы кто-нибудь мог проконсультироватьсяПолучить наибольшее значение в STRUCT MATLAB

+1

Вы имеете в виду '' cell' не struct' я думаю. Не указаны поля. – chappjc

ответ

2

Я буду считать, что ваша мера того факта, что 3-й и 4-й столбцы больше, чем в других массивах, основана на их сумме.

S = struct(); 
    S(1,1).v=[209, 443, 319, 206]; 
    S(2,1).v=[300, 473, 1, 1]; 
    S(3,1).v=[305, 470, 1, 1]; 


    % find index with maxium 3th and 4th column based on their sum 
    [~, ind] = max(cellfun(@(v) v(3)+v(4), {S(:).v})) 

    % set S to be equal only to the value with highest 3th and 4th column 
    S = S(ind); 

Btw, синтаксис S(1,1)=[209,443,319, 206] неверен. Невозможно создать такую ​​структуру. Таким образом, я добавил в структуру поля v.

В случае, если вы имеете в виду на самом деле cell, а не struct, как @chappjc указано, чем вы можете сделать следующее:

S = {}; 
    S{1,1}=[209,443,319, 206]; 
    S{2,1}=[300,473,1,1]; 
    S{3,1}=[305,470,1,1]; 

    [~, ind] = max(cellfun(@(v) v(3)+v(4), S)); 
    S = S(ind); 
Смежные вопросы