我有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)将是空的。
有人可以帮我吗?
答案 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))