2013-03-12 6 views
0

В настоящее время я работаю над проектом в Matlab, где у меня есть массив ячеек массивов ячеек. Первый массив ячеек - 464 столбца и 1 строка. Каждая из этих ячеек представляет собой еще один массив ячеек, который состоит из 96 столбцов и 365 строк. Мне нужно получить среднее значение из 96 столбцов для каждого из 464 массивов и поместить каждый из 464 массивов в другую строку в новом массиве, называемом средним. Я попытался написать код, чтобы просто сделать один столбец следующим образом:Как принять среднее значение столбцов из массива в массиве?

mean = Homes{1,1}(1:) 

Но я когда-либо я пытаюсь запустить этот код, который я получил ошибку последующей:

mean = Homes{1,1}(1:) 
         | 
    Error: Unbalanced or unexpected parenthesis or bracket. 

В основном мое окончательное имя массива означает, должно быть 96 столбцов на 464 строки. Я застрял и мог действительно использовать вашу помощь.

спасибо.

+0

'(1:)', безусловно, не будет работать, вы можете попробовать '(1, :)'. Я никогда не знаю, что делать с массивом ячеек. Я думаю, если вы поместите цикл через верхний массив ячеек и назначьте каждую ячейку временной переменной, вы можете определенно получить среднее значение. –

+0

Попробуйте использовать cellfun. Вы можете попробовать cellfun (@ mean, Homes), и это применит среднюю функцию к каждому элементу массива ячеек. – Justin

+0

Когда я попробовал cellfun (@ mean, Homes), я получил это сообщение ... cellfun (@ mean, Homes) Неопределенная функция 'sum' для ввода аргументы типа 'cell'. Ошибка в среднем (строка 28) y = sum (x)/size (x, dim); – user2093732

ответ

0

Предлагаю вам попробовать следующий код на более мелкой матрице. Посмотрите, дает ли он желаемые результаты.

a=cell(1,4); %for you it will be a=cell(1,464) 
for i=1:4 
    a{i}=randi(10,[5 10]); %for you it will be a{i}=randi(10,[365 96]); 
end 
a1=cell2mat(a); %just concatenating 
a1=mean(a1); %getting the mean for each column. in your case, you should get the mean for 96*464 
a2=reshape(a1,[10 4]); %now what reshape does it it takes first 10 elements and arranges it into first column. 
%Therefore, since I finally want a 4x10 matrix (in your case 464x96), i.e. mean of 10 elements in first cell array on first row and so on... 
%Thus, 1st 10 elements should go to first column after doing reshape (since you want to keep them together). Therefore, instead of directly making matrix as 4x10, first make it as 10x4 and then take transpose (which is the next step). 

a2=a2'; %thus you get a 4x10 matrix. 

В вашем случае конкретно, код будет

a=cell(1,464); 
for i=1:464 
    a{i}=randi(10,[365 96]); 
end 
a1=cell2mat(a); 
a1=mean(a1); 
a2=reshape(a1,[96 365]);       
a2=a2';