获得具有不同尺寸的细胞的平均值

时间:2014-04-12 06:48:09

标签: matlab mean

我有24个单元格,有些尺寸为16x1,有些尺寸为15x1,有些尺寸为14x1。我想创建一个16x1单元格,每行是这24个单元格中相同行的平均值。任何'失踪'值将被忽略(即,不包括在平均值中)。为了使我的问题更清楚,这是我所拥有的一个例子:

A1是14x1单元格,A2:16x1,A3:16x1,A4:15x1,A5:14x1,A6:16x1等。

如果我这样做:

M =小区(16,1)

对于n = 1:16

M(n)=平均值([A1(n,1)A2(n,1)A3(n,1)... A24(n,1)]

当然,这会给我一个16x1 M,但最后两行(即M(15,1)和M(16,1)将是空的。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

这应该这样做

Acell = {A1,A2,A3,A4,....};
maxL = max(cellfun(@length, Acell))
M = zeros(maxL,1);
for n=1:maxL
    M(n) = mean(cellfun(@(V) V(n), Acell((cellfun(@length, Acell))>=n)))
end

cellfun将一些函数(第一个参数)应用于单元格数组中的每个元素。


<强>解释

首先从矢量

创建一个单元格数组Acell
Acell = {A1,A2,A3,A4,....};

获取Acell

中矢量的最大长度
maxL = max(cellfun(@length, Acell))

这将返回Acell中的每个向量的第n个元素(A1(n),A2(n),A3(n),...)。但是,如果n大于任何矢量长度,则会失败。

cellfun(@(V) V(n), Acell)

这将创建长度等于或大于n的向量的临时单元数组。

Acell((cellfun(@length, Acell))>=n)

结合上面的内容,这将返回长度等于或大于n的Acell中每个向量的第n个元素。然后,您可以只取这个函数返回的值的平均值。

cellfun(@(V) V(n), Acell((cellfun(@length, Acell))>=n))