我有一个3维(或更高)的数组,我想通过另一个矢量进行聚合。具体应用是每天对空间数据进行观察并对其进行平均以获得每月的数值。所以,我有一个尺寸为<Lat, Lon, Day>
的阵列,我想创建一个尺寸为<Lat, Lon, Month>
的阵列。高维数组的高效聚合
这是我想要的模拟示例。目前,我可以使用循环正确的输出,但在实践中,我的数据是非常大的,所以我希望比第二循环更有效的解决方案:
% Make the mock data
A = [1 2 3; 4 5 6];
X = zeros(2, 3, 9);
for j = 1:9
X(:, :, j) = A;
A = A + 1;
end
% Aggregate the X values in groups of 3 -- This is the part I would like help on
T = [1 1 1 2 2 2 3 3 3];
X_agg = zeros(2, 3, 3);
for i = 1:3
X_agg(:,:,i) = mean(X(:,:,T==i),3);
end
在2个维度,我会用accumarray
,但不接受更高维度的输入。
'for'已经变得非常有效率。我不会再认为它是一个瓶颈。有这样的说法 - 也许你可以用'parfor'替换它来使用你的附加内核。 – bdecaf