【发布时间】:2012-09-12 07:00:27
【问题描述】:
我有一组在 S 个时间点进行的 N 次测量(不同测量的时间点不同)。我有两个矩阵:
V - 表示测量值的 NxS 矩阵
T - 表示测量时间的 NxS 矩阵
我想生成一个矩阵 VI,它表示时间 TI 的线性插值测量值。 代码的非向量化版本如下:
tic;
VI = zeros([size(V,1), size(TI,2)]);
for j = 1:size(V,1)
VI(j,:) = interp1(T(j,:),V(j,:),TI);
end
toc;
我想重写此代码以消除 for 循环,以便使用矩阵运算和函数实现它。可以矢量化吗?
【问题讨论】:
-
请提供一些数据来改进您的解决方案。该配置文件将使我们能够了解瓶颈在哪里。
-
@Andrey - 对不起。这个问题的重点不是“我怎样才能加快我的代码?”关键是-“可以使用矩阵运算/函数来完成”消除for循环。我将编辑问题以删除对执行时间的引用,这有点像红鲱鱼。
-
你看,循环并不邪恶。你说性能不是你的主要兴趣。你想矢量化的原因是什么?您想为读者提供更清晰的代码吗?也许是为了节省内存空间?
-
(1) 代码清晰; (2) 正确使用matlab语言和内置程序; (3) 如果存在矢量化的内置函数,则有可能大幅(数量级)性能改进。
-
(1) - 我认为您的代码非常出色且清晰。关于 (2) - 这是非常主观的。关于(3)——也许你可以不用矢量化来提高性能,值得一试!
标签: matlab interpolation vectorization