arrays - 在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
但它很慢。有没有更快的方法来做到这一点?
解决方案
您可以使用t(2,:)==0
创建一个在您的条件下为真的数组,然后在条件为真时t(1,:).*(t(2,:)==0)
给出其中一个0
或当前时间戳。
因此,如果t(2,:)
不减少,您应该能够执行类似的操作
t(1,:) = t(1,:) - cummax( t(1,:) .* (t(2,:)==0) );
推荐阅读
- bash - Bash/AWS CLI:试图弄清楚如何在通过 AWS SSM 重启 EC2 实例组时通过 2 次检查来验证一系列正常运行时间
- javascript - 在富文本编辑器中使用 javascript 将 markdown 转换为 html
- reactjs - 这个路由器如何在 React.js 中工作 - 我不能像我想要的那样做链接
- git - 如何`git fetch`默认分支
- python - 使用随机密码生成器获取大于变量的输出
- arrays - 关于C中整数指针变量大小的问题
- python - 如何从python中的csv生成每一行的插入语句?
- r - 在 ggplot 中绘制带有图例的时间序列的问题(股票价格)
- android - 展开和隐藏布局 Android
- html - 并排引导选项卡内容集卡