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

How to create a vectorized version of this code in Matlab

我试图对我的代码进行矢量化,但遇到了这个障碍,找不到解决办法。

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

array of 0 and 1

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

array of calculated time

代码是这样的:

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 循环的问题是它非常慢。对于大型 array01 需要很多秒,我很确定有一种聪明的方法可以做到这一点,但我太笨了看不到它。

感谢您的帮助!

这是一种基于稀疏矩阵的向量化方法:

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));