[英]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.