【发布时间】:2020-01-07 07:30:03
【问题描述】:
我有两个数组:
timesteps = [1,3;5,7;9,10];
data = [1,2,3,4,5,6,7,8,9,10];
timesteps 数组中的值描述了我想要的data 的哪些值。第一列开始,第二列结束。
例如这里我想得到[1,2,3,5,6,7,9,10]。
所以这段代码对我来说工作得很好,但是由于 for 循环它非常慢...... Matlab 中是否有一个衬线,以便我可以摆脱 for 循环?
newData=[];
for ind=1:size(timesteps,1)
newData=cat(2,newData,data(timesteps(ind,1):timesteps(ind,2)));
end
编辑: 使用Wolfie 的解决方案,我得到了以下(非常好的)结果。 (我只使用了一个小数据集,通常是 50 倍大。)
(Mine) Elapsed time is 48.579997 seconds.
(Wolfies) Elapsed time is 0.058733 seconds.
【问题讨论】:
-
循环在 MATLAB 中不再变慢了。这是一个普遍的误解。由于 R2016b 循环中的 JIT 大修几乎不比矢量化解决方案慢,而且通常可读性更好(因此可调试)。关于您想要的结果:
8在那里做什么? -
此外,在您的代码 sn-p 中,变量
newData未初始化,您编写了ts而不是时间步长,如果您想要更好的比较,您应该更正它 -
您的示例根本不使用
data变量...我怀疑您的意思是data(timesteps(ind,1):timesteps(ind,2))在cat内
标签: matlab for-loop optimization indexing vectorization