我有一个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
非常感谢任何帮助。
答案 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
吗?