繁体   English   中英

在matlab中有效地从数组中减去一个值

[英]subtract a value from an array efficiently in matlab

我有一个二维数组,表示两个通道中光子的到达时间,该数组包含一条线,其中包含有关到达时间的信息,另一条包含有关时间戳的信息

  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

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

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

因此,如果t(2,:)不减少,你应该能够做类似的事情

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM