首页 > 解决方案 > 在matlab中有效地从数组中减去一个值

问题描述

我有一个 2-dim 数组,表示光子在两个通道中的到达时间,该数组包含一行包含有关到达时间的信息,另一行包含有关时间戳的信息

  data = stream.getData();
    timestamps = data.getTimestamps();
    channels = data.getChannels();
    timetags = [timestamps; channels];
    t= [timetags];

我需要一个开始-多次停止测量,所以当通道 1 中有点击时,我需要在通道 2 的每个时间戳中减去该点击的时间戳,直到通道 1 中的下一次点击,依此类推。我为此使用了for cicle:

for i=1:length(t)
    if t(2,i)==1
        t(1,i:end)=t(1,i:end)-t(1,i)
    end
end

但它很慢。有没有更快的方法来做到这一点?

标签: arraysmatlabclick

解决方案


您可以使用t(2,:)==0创建一个在您的条件下为真的数组,然后在条件为真时t(1,:).*(t(2,:)==0)给出其中一个0或当前时间戳。

因此,如果t(2,:)不减少,您应该能够执行类似的操作

t(1,:) = t(1,:) - cummax( t(1,:) .* (t(2,:)==0) );

推荐阅读