创建 3D 阵列 (Matlab)

Creating 3D array (Matlab)

提问人:user5618251 提问时间:5/9/2016 最后编辑:user5618251 更新时间:5/9/2016 访问量:73

问:

我目前正在对冰盖动力学进行建模。我有一个循环,可以计算 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 的数组,其中第四个列给出了日照随时间的变化。我的问题:我想创建一个额外的维度,一个 8760x8x61 数组,其中 c0 不是恒定的,而是在 -140 和 -80 之间变化:

c0=-140:1:-80;

我该怎么做?我尝试了一些东西,但似乎效果不佳。

谢谢!

MATLAB 循环多 维数组

评论

0赞 beaker 5/9/2016
MATLAB 中的所有索引值都必须是 .您必须将数组的第三个维度范围从 1 到 61 并减去 141。获取 的正确值。>= 1c

答:

0赞 Divakar 5/9/2016 #1

对于需要扩展的情况,可以引入 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