我在MATLAB中有一行脚本存在一些问题,应该对错误检测到的事件进行排序。基本上,我有这两个变量spikemax
和spikethresh
,它们包含了数据跟踪的下标。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]
您的代码中有两个问题:
-
(spikethresh(i+1)-spikethresh(i)) < (spikemax(i)-spikethresh(i))
并不能真正测试你的状况。你要测试的是spikethresh(i+1) < spikemax(i)
。也就是说,如果spikethresh
中的下一个值小于spikemax
中的当前值,则不需要spikethresh
中的当前值。 -
你做你的测试正好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]
。