【发布时间】:2018-11-16 12:54:07
【问题描述】:
我有分别大小为 NL、NL、Nx 和 Nalp 的向量 Ll、Lh、x 和 alp。我还有一个大小为 NL * NL * Nx * Nalp 的矩阵 G。 G 是 Ll、Lh、x 和 alp 的函数。我一起在 G 中创建了网格数组和样本值。
对于每个 x 和 alp,我创建一个插值并存储在一个元胞数组中。见下面代码sn-p:
for ixs=1:Nx
for ias=1:Nalp
Gn(:,:,ixs, ias)={griddedInterpolant({Ll, Lh}, G(:,:,ixs, ias),'linear', 'none')};
end
end
优点:与 interp2 相比,这非常快,尤其是因为我必须多次评估 Gn。
缺点:(1) 需要大量内存,(2) 无法轻松矢量化以避免出现以下类型的额外循环(再次被多次评估)
for ixs=1:Nx
for ias=1:Nalp
GGn=Gn{:,:, ixs, ias};
SomeVector(ixs, ias)*GGn(Llnx, Lhnx);
end
end
(a) 如果我能以某种方式向量化名为 Gn 的整个 griddedInterpolant 类,我可以优化最后一个循环,并且 (b) 如果我可以只存储一次向量 Ll 和 Lh,我可以更有效地使用内存.
我需要你的帮助。确切地说,我怎样才能更有效地做到这一点?谢谢。
最好的,
BK
编辑: 一个解决方案是生成一个函数 Gn,它以 Ll 和 Lh 作为参数,给定 x 和 alp。 Gn 返回一个函数句柄数组,每个句柄对应一个 (x, alph)。然后,调用 Gn(Llnx, Lhnx, x, alp) 返回插值。现在,(Llnx, Lhnx, x, alp) 每个都可以是具有相同数量元素的数组。任何使用专业代码的有效方法?
【问题讨论】:
标签: matlab