【问题标题】:Get mean of cells with different dimensions获取不同维度的单元格的平均值
【发布时间】:2014-04-12 15:31:32
【问题描述】:

我有 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)=mean([A1(n,1) A2(n,1) A3(n,1) ... A24(n,1)]

结束

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

谁能帮我解决这个问题?

【问题讨论】:

  • 这可以通过arrayfun 或cellfun 完成。请添加一个小示例单元格数组和预期的答案。
  • 例如 A1=[2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]' 和 A2=[4 4 4 4 4 4 4 4 4 4 4 4 4 4]'。所以 A1 是 16x1,A2 是 14x1。 M 应为 M=[3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2]'。注意 M 的最后两个值。

标签: matlab mean


【解决方案1】:

应该这样做

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)

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

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

【讨论】:

  • 这太棒了!非常感谢你,ysakamoto!
猜你喜欢
  • 1970-01-01
  • 2023-01-27
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
  • 2015-07-27
  • 1970-01-01
相关资源
最近更新 更多