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



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

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

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

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创建一个在您的条件下为true的数组,然后t(1,:).*(t(2,:)==0)在为true时提供0或当前时间戳。

因此,如果t(2,:)是非递减的,你应该能够做一些类似的事情

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

相关内容

  • 没有找到相关文章

最新更新