创建3D数组(Matlab)

时间:2016-05-08 23:18:04

标签: matlab loops multidimensional-array

我目前正在建模冰盖动力学。我有一个循环计算表面能量平衡8760小时(1:tmax)和8个不同位置(1:no_stations)。看起来如下:

tau=0.5;
albedo=0.35;
c0=-90;
c1=10;

for i=1:tmax
    for e=1:no_stations
        psi(i,e) = tau*(1-albedo)*insol(i,4)+c0+c1*temp_stations(i,e);
    end
end

温度数据(temp_stations)是一个8760x8阵列,8个位置的相应温度为8760小时,而insol(i,4)是8760x4的阵列,其中第四个colomn随时间推移日照的演变。我的问题:我想创建一个额外的维度,一个8760x8x61数组,其中c0不是常数,但在-140和-80之间变化:

c0=-140:1:-80;

我该怎么做?我尝试了一些东西,但似乎没有成功。

谢谢!

1 个答案:

答案 0 :(得分:0)

对于需要扩展的情况,可以为bsxfunpermute引入矢量化解决方案,如此 -

parte2 = bsxfun(@plus,permute(c0,[1,3,2]),c1*temp_stations);
psi_out = bsxfun(@plus,tau*(1-albedo)*insol(:,4),parte2);

如果您没有挖掘 bsxfun,或者您只是想验证矢量化方法的结果,那么这里是等效的循环代码 -

for i=1:tmax
    for e=1:no_stations
        for k = 1:numel(c0)
            psi(i,e,k) = tau*(1-albedo)*insol(i,4)+c0(k)+c1*temp_stations(i,e);
        end
    end
end