如何在Matlab中创建此代码的矢量化版本



我试图将代码矢量化,但遇到了这个障碍,找不到答案。

我有一个0和1的数组,它的工作原理就像秒表。我创建它的方式已经矢量化了。这是一个例子:

0和1 阵列

现在,每当数组为1时,必须启动计数器乘以采样率,才能得到当前测量的时间。每次第一个数组为0时,必须为下一组1重置秒表。这是一个结果。

计算时间阵列

代码是这样的:

timearray = zeros(size(array01));
for ii = 1:size(array01)
if (array01(ii) == 0)
timearray(ii) = 0;
else
timearray(ii) = 0.005 + timearray (ii-1);
end
end

这个for循环的问题非常缓慢。对于一个大数组01,它需要很多秒,我很确定有一个聪明的方法可以做到这一点,但我太笨了,看不见。

谢谢你的帮助!

以下是一种基于稀疏矩阵的矢量化方法:

array01 = [0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0].'; % example data
sample_period = 0.005;                                       % example data
t = sparse(1:numel(array01), cumsum([true; diff(array01(:))>0]).', array01);
timearray = sample_period*full(max(cumsum(t, 1).*t, [], 2));

最新更新