在MATLAB中使用for循环整理错误事件?



我在MATLAB中有一行脚本存在一些问题,应该对错误检测到的事件进行排序。基本上,我有这两个变量spikemaxspikethresh,它们包含了数据跟踪的下标。spikemax在我的数据跟踪中包含了正确的时间点索引,但spikethresh仍然有太多的值,我需要对其中的一些进行排序。规则应该是,spikethresh的每个值后面总是跟着spikemax,然后是下一个spikethresh。我添加了一个图像,其中显示了红色和绿色的点,这是我的两个变量最终在数据跟踪中显示的位置。

我的想法是运行一个for循环,其条件是从spikethresh中删除值以更新变量。在代码中,我添加了一些示例值,简单地显示什么是不工作。这里的输出是[15029;15055;15066;15339],但我试图得到

spikethresh = [15029;15066;15339]

我如何修复我的代码,使其产生所需的输出?

下面是我的代码:

% Example variables:
spikethresh = [15029; 15038;15055; 15060; 15066; 15339];
spikemax= [15034; 15072; 15344];
spikethresh_corr = spikethresh ;
for i = 1:length(spikemax)-1
if (spikethresh(i+1)-spikethresh(i)) < (spikemax(i)-spikethresh(i))
spikethresh_corr(i) = [] ; 
end
spikethresh = spikethresh_corr ;
end 

% Results in spikethresh = [15029;15055;15066],
% but I am trying to get [15029;15066;15339]

您的代码中有两个问题:

  1. (spikethresh(i+1)-spikethresh(i)) < (spikemax(i)-spikethresh(i))并不能真正测试你的状况。你要测试的是spikethresh(i+1) < spikemax(i)。也就是说,如果spikethresh中的下一个值小于spikemax中的当前值,则不需要spikethresh中的当前值。

  2. 你做你的测试正好2次(length(spikemax)-1是2)。但你可能有更多的元素要删除。对于每个i,您必须重复应用您的测试,直到它不再令人满意为止(在当前spikemax(i)之前没有更多的值可以删除)。

你的代码应该是这样的:

spikethresh = [15029; 15038; 15055; 15060; 15066; 15339];
spikemax = [15034; 15072; 15344];
for i = 1:length(spikemax)-1
while spikethresh(i+1) < spikemax(i)
spikethresh(i) = [];
end
end

结果是spikethresh = [15029; 15066; 15339]

相关内容

  • 没有找到相关文章

最新更新