如何从数组中的数组中取出列的平均值?

时间:2013-03-12 20:24:57

标签: matlab multidimensional-array mean cell-array

我目前正在Matlab开展一个项目,我有一个单元格数组的单元格。第一个单元阵列长464列,深1行。这些单元格中的每一个都是96列和365行的另一个单元阵列。我需要能够为464个数组中的每一个获得96列的平均值,并将每个464个数组放在名为mean的新数组中的不同行上。我曾尝试编写代码,只做一个列,如下所示:

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

但是当我尝试运行此代码时,我收到了以下错误:

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

基本上我的最终数组名称意味着需要96列乘464行。我被困住了,可以真正使用你的帮助。

谢谢。

1 个答案:

答案 0 :(得分: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';