我有一个二维数组,表示光子在两个通道中的到达时间,该数组包含一行关于到达时间的信息,另一行包含关于时间戳的信息
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) );