2012-05-07 5 views
1

Я создаю функцию для использования нескольких матриц в студии анализа.Использование последовательных матриц в Matlab

матрицы приведены с тем же именем, со ссылкой даты в имени (месяц к месяцу и году в год: ноябрь-1956 является matrix5611, декабрь-1956 является matrix5612, январь-1957 является matrix5712, и так далее до конец 1999

для каждого из них должно быть сравнение между средним значением каждого месяца/года (в зависимости от того, что область исследования вы сосредоточены на).

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

Любая идея или полезная функция?

+0

'S = load ('mydata.mat');' очень полезно, тогда вы можете получить доступ к структуре, используя имена динамических полей. –

ответ

0

Если у вас есть ваши данные в различных матрицах, вы можете использовать eval для хранения средства для некоторой матрицы, в этом примере MeanMatrix, в котором Y размерности год и X измерение месяц:

Edit: Это не работает номер от 5611, но YYMM ...

Edit: кажется, что матрицы не начинаются с января 1956 года, а с ноября 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 

Тогда вы можете сравнить средства месяцев и лет пути вы пожелает.

+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

Согласен, если ОП настолько ограничен, то он есть. Я просто хотел сообщить ему об этой возможности. –

Смежные вопросы