2017-03-27 2 views
1

나는 구조 (SA1)를 가지고 : FirstImpression, FashionSense, 호환성 (7 * 1) 크기 내가 FirstImpression & 패션 감각의 최대 값의 인덱스를 찾아 1 호환성의 값을 증가 할구조의 필드 값 업데이트 | 필드 MATLAB

동일한 색인에

최대 값의 인덱스를 찾았습니다. 그러나 이러한 인덱스의 호환성 값을 늘리는 것이 어렵다는 것을 알고 있습니다.

방법을 제안 할 수 있습니까? 코드는 다음과 같습니다.

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 배열의 도트 표기법을 사용하면 comma separated list이되며 배열을 구성하는 데 사용할 수 있습니다. 매번 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{:}; 
+0

감사합니다. 이 작은 코드에서 제게 많은 것을 가르쳐 주셨습니다. 감사 !! –

+0

작성한 코드가 IF 루프에 있고 성공적인 if 루프 이후에 호환성 값을 원래 값으로 재설정하겠습니까? 그러면 어떻게 될까요? –

+0

@amansaraf 다른 값을 다시 할당하려면 마지막 두 줄을 반복하고 (조금 수정하십시오). – Suever