MATLAB中如何用for循环剔除spikethresh的错误事件索引
MATLAB 阈值索引筛选问题修复
原有代码问题
- 循环范围设置错误,仅遍历到
length(spikemax)-1,无法覆盖完整的匹配逻辑 - 循环中动态删除数组元素会导致后续索引错位,数组长度实时变化后原有循环下标对应的元素位置完全偏移
- 判断条件和需求不匹配,原有判断逻辑无法满足「两个相邻保留阈值之间必须存在一个对应spikemax」的规则
修复后代码
% 示例变量 spikethresh = [15029; 15038;15055; 15060; 15066; 15339]; spikemax= [15034; 15072; 15344]; n_max = length(spikemax); spikethresh_corr = zeros(n_max,1); last_thresh_pos = 0; % 记录上一个选中的spikethresh的位置,初始值设为0对应阈值为0 for k = 1:n_max % 筛选规则:大于上一个选中的阈值、小于当前spikemax的所有阈值中取最后一个 valid_idx = find(spikethresh > spikethresh(last_thresh_pos) & spikethresh < spikemax(k), 1, 'last'); spikethresh_corr(k) = spikethresh(valid_idx); last_thresh_pos = valid_idx; end
实现说明
通过为每一个spikemax匹配符合条件的最后一个spikethresh的方式实现筛选,自动保证两个相邻保留阈值之间刚好存在一个对应spikemax,运行代码输出的spikethresh_corr和预期结果[15029;15066;15339]完全一致。
内容的提问来源于stack exchange,提问作者Olfo
相关产品推荐
相关产品推荐

