Обновить значения поля в структуре | Matlab

У меня есть структура (sa1) с полями: FirstImpression, FashionSense, совместимость (7*1) размер

Я хочу найти индексы максимального значения FirstImpression & Fashion Sense и увеличить значение Compatibility на 1 для того же индекса.

Я обнаружил, что индексы имеют максимальное значение, однако мне трудно увеличить значение совместимости для этих индексов.

Можете ли вы предложить способ? Вот код:

firstImpression = zeros(1,size(sa1(),2));
fashionSense = zeros(1,size(sa1(),2));

for i=1:(size(sa1(),2))
firstImpression(i) = sa1(i).FirstImpression;
fashionSense(i) = sa1(i).FashionSense;
end

maxFirstImpressionScore = max(firstImpression);
maxFashionSenseScore = max(fashionSense);
maxFirstImpressionScoreIndexes = find(firstImpression == maxFirstImpressionScore);
maxFashionSenseScoreIndexes = find(fashionSense == maxFashionSenseScore);

for k = 1:size(maxFashionSenseScoreIndexes,2)
    sa1(maxFashionSenseScoreIndexes(k)).Compatibility = sa1(maxFashionSenseScoreIndexes(k)).Compatibility +1;
end

Какие-либо предложения?

1 ответ

Решение

Использование точечной записи в массиве struct записи возвращают разделенный запятыми список, который можно использовать для формирования массивов. Затем вы можете оперировать этими массивами, а не перебирать struct каждый раз. Для вашей проблемы вы можете использовать что-то вроде:

% Create an array of firstImpression values and find the maximum value
mx1 = max([sa1.firstImpression]);

% Create an array of fashionSense values and find the maximum value
mx2 = max([sa1.fashionSense]);

% Create a mask the size of sa1 that is TRUE where it was equal to the max of each
mask1 = [sa1.firstImpression] == mx1;
mask2 = [sa1.fashionSense] == mx2;

% Increase the Compatibility of struct that was either a max of firstImpression or 
% fashionSense
compat = num2cell([sa1(mask1 | mask2).Compatibility] + 1);

% Replace those values with the new Compatibilty values
[sa1(mask1 | mask2).Compatibility] = compat{:};
Другие вопросы по тегам