средние значения матрицы ячеек - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть следующий скрипт для импорта текстовых файлов в Matlab, которые включают почасовые данные, где я затем пытаюсь преобразовать их в среднесуточные значения:

  clear all 
  pathName = ...
  TopFolder = pathName; 
  dirListing = dir(fullfile(TopFolder,'*.txt'));%Lists the folders in the directory specified by pathName.

  for i = 1:length(dirListing);
      SubFolder{i} = dirListing(i,1).name;%obtain the name of each folder in
              %the specified path.
  end

  %import data
    for i=1:length(SubFolder);
        rawData1{i} = importdata(fullfile(pathName,SubFolder{i}));
    end


  %convert into daily averages
    rawData2=cell2mat(rawData1);
        %create one matrix for entire data set
    altered=reshape(rawData2,24,(size(rawData2,2)*365));
        %convert into daily values
    altered=mean(altered)';
        %take the average for each day
    altered=reshape(altered,365,size(rawData2,2));
        %convert back into original format

Моя проблема заключается в попытке преобразовать данные обратно в тот же формат, что и «rawData1», который был ячейкой для каждой переменной (где каждая переменная обозначена «SubFolder». Причина для этого заключается в том, что все, кроме одного из переменные являются векторами, где оставшаяся переменная является матрицей (8760 * 11).

Итак, пример этого будет:

  clear all 

  cell_1 = rand(8760,1); 
  cell_2 = rand(8760,1);
  cell_3 = rand(8760,1);
  cell_4 = rand(8760,1);
  cell_5 = rand(8760,1);
  cell_6 = rand(8760,11);
  cell_7 = rand(8760,1);
  cell_8 = rand(8760,1);
  cell_9 = rand(8760,1);

  data = {cell_1,cell_2,cell_3,cell_4,cell_5,cell_6,cell_7,cell_8,cell_9};

Где мне нужно преобразовать каждую ячейку в «данных» из часовых значений в среднесуточные значения (то есть 365 строк).

Любой совет будет высоко ценится.

1 Ответ

1 голос
/ 16 февраля 2012

Я думаю, что это то, что вы хотите.

data = cellfun(@(x) reshape(mean(reshape(x,24,[]))',365,[]),data,'uniformoutput',false);

Однако, это немного запутанно, поэтому я объясню немного.преобразует каждую ячейку данных в 24 на 365, вычисляет среднее значение, а затем превращает его обратно в один столбец.Это прекрасно работает, когда исходные данные имеют только 1 столбец ... но для cell_6 с 11 столбцами это помещает все данные в конец.Поэтому я добавил дополнительную оболочку reshape(...) вокруг части mean(...), чтобы поместить ее обратно в исходные 11 столбцов ... или более точных N столбцов длиной 365 строк.

Примечание. Это приведет к ошибкам, если у вас когда-либо будут размеры наборов данных, не равные 8760 по X.

...