matlab中来自单元阵列的平均矩阵

时间:2016-06-26 02:56:01

标签: matlab

我遇到了与细胞阵列有关的问题。我有一个单元格数组X(大小为400),每个元素都是一个大小为(1x100)的矩阵。我想获得平均矩阵,以便得到1x100的结果。我尝试过cellfun和之前讨论过的其他方法。我无法获得理想的结果。我可以在不将单元阵列转换成矩阵的情况下完成。

2 个答案:

答案 0 :(得分:1)

我就是这样做的:将所有1×100矢量垂直连接成矩阵,然后计算每列的平均值:

x = {[9 4 5 4] [5 3 6 7] [8 2 4 1]}; % example cell array of 3 vectors of size 1×4
result = mean(vertcat(x{:}), 1); % concatenate vertically. Mean of each column

在此示例中,

result =
    7.3333    3.0000    5.0000    4.0000

如果你真的想避开矩阵,可以使用循环来积累值:

x = {[9 4 5 4] [5 3 6 7] [8 2 4 1]}; % example cell array of 3 vectors of size 1×4
result = zeros(size(x{1})); % initiallize
for k = 1:numel(x)
    result = result + x{k}; % accumulate values
end
result = result / numel(x); % divide to obtain mean

答案 1 :(得分:0)

您正确使用cellfun吗? 让我们举一个测试单元的例子,每个单元中有4个元素,大小为3

>> Cell1 = {[4 3 5 3], [1 2 3 4], [7 8 9 6]}

Cell1 = 

    [1x4 double]    [1x4 double]    [1x4 double]

使用匿名函数x,然后cellfun取x的每个单元格的均值,在我们的例子中为Cell1,然后最后得到结果矩阵的均值

  mean(cellfun(@(x)  mean(x),Cell1))

  ans =

       4.5833