提问人:user5618251 提问时间:5/9/2016 最后编辑:user5618251 更新时间:5/9/2016 访问量:73
创建 3D 阵列 (Matlab)
Creating 3D array (Matlab)
问:
我目前正在对冰盖动力学进行建模。我有一个循环,可以计算 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;
我该怎么做?我尝试了一些东西,但似乎效果不佳。
谢谢!
答:
0赞
Divakar
5/9/2016
#1
对于需要扩展的情况,可以引入 bsxfun
和 permute
以获得矢量化解决方案,如下所示 -
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
评论
>= 1
c