如何使用几个循环在矩阵中进行计算?

时间:2017-01-04 19:43:36

标签: matlab matrix

我有一个9 x 682矩阵(A)。每36列对应一个新变量(总共17个变量)。对于每个变量(36列),我想计算每个第6列的平均值(即每列36列的第1,7,13,19,31列等的平均值。

我坚持使用几个For循环。

A_averaged = zeros(9,102);

for  i = 1:36:length(A)
    for j = i:i+35
        for k = j:6:j+1
            A_averaged(:,k) = mean(A(:,k), 2);
        end
    end
end

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

要对此进行矢量化,我会以智能方式重塑您的数据,选择所需的列,然后计算均值。

% Reshape data to 3D with dimensions: 9 x 36 x (nGroups)
B = reshape(A, size(A, 1), 36, []);

% Now grab the columns of each chunk you want
C = B(:, 1:6:end, :);

% Now compute the mean along the first dimension and squeeze the result
result = squeeze(mean(C, 1));

您可以使用以下内容在一行中执行此操作:

result = squeeze(mean(reshape(A(:, 1:6:end), size(A, 1), 6, []), 1))

如果您想要所有行和列的平均值,则可以将数据重新整形为45 x nGroups并计算第一维的平均值

result = mean(reshape(C, [], size(C, 3)), 1);

作为旁注,9 x 682的初始尺寸实际上不能被36列整除。你是说9 x 612吗?