2012-05-07 3 views
1

분석 스튜디오에서 여러 행렬을 사용하는 함수를 만듭니다.Matlab에서 연속 행렬 사용

행렬들는 년 월 및 연도에 날짜 이름으로 참조 (달과 같은 이름으로 주어진다 : 11월-1956 matrix5611 인 12 월 - 1956 matrix5612이며, 1 월 1957 matrix5712, 등까지 각각에 대해 1999 년

의 끝 (당신이에 초점을 맞추고있다 연구의 어떤 영역의 따라) 각각의 월/년의 평균 값 사이의 비교가 있어야한다.

나는 일부를 사용하려고 해요 입력 행렬의 이름을 날짜별로 수동으로 작성하는 대신 변경하는 루프가 있지만 도움이되는 함수가 유용 할 것입니다.

아이디어 나 유용한 기능이 있습니까?

편집 : 당신이 다른 행렬에 데이터가있는 경우

+0

'S = load ('mydata.mat');'는 매우 유용합니다. 그런 다음 동적 필드 이름을 사용하여 구조 액세스를 할 수 있습니다. –

답변

0

, 당신은있는 Y 치수 년이며, X 치수 달이 예 MeanMatrix에, 일부 매트릭스 수단을 저장하는 eval을 사용할 수 있습니다 그것은 아니다 ... 5611 만 YYMM에서 수를 실행

편집 : 행렬은 1956

% add here missing months matrix index strings. 

MissingMatricesCellArray = {'5601', '5602', '5603', '5604', '5605', '5606', '5607', '5608', '5609', '5610'}; 

% MissingmatricesCellArray = {}; 

for Year = 56:99 
    for Month = 1:12 
     NumString = sprintf('%02d%02d', Year, Month); 

     % calculate and store means only for matrices that are not missing. 
     if ~(ismember (cellstr(NumString), MissingMatricesCellArray)) 
      MeanMatrix(Year,Month) = mean(mean(eval ([ 'matrix', NumString ]))); 
     end 
    end 
end 

이 그럼 당신은 개월 년 방식의 수단을 비교할 수 있습니다 11월 년 1 월 1956 만에서 시작하지 않는 것 같다 너 소원.

+0

편집 해 주셔서 감사합니다. 두 대답 모두 지금 당장 의미가 있습니다 – Luis

0

세포 배열을 eval 대신에 사용하는 것을 선호합니다.

for y = 56:99 % for each year 
    for m = 1:12 % for each month  
     ind = createYearMonthInd(y,m); 
     matrix{ind} = ... % whatever you want here (note the curly braces) 
    end 
end 


function ind = createYearMonthInd(y,m) 
    ind = y * 100 + m; 
+0

OP는 원본 데이터를'matrix5611','matrix5612','matrix5701' 등과 같은 별도의 행렬로 받아 들였으므로 더 편리한 형태의 데이터 저장 (예 : 셀 배열 또는 모든 데이터에 대한 하나의 행렬)은 별도의 행렬에서 첫 번째 변환이 필요합니다.이 경우에는 'eval'을 사용하거나 사용자 정의 함수를 생성하고 실행해야합니다. – nrz

+0

동의서가 OP가 너무 제한적이라면 그는 그렇습니다. 나는 그에게이 특징을 알리고 싶었다. –

관련 문제