You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB中如何自动调整阈值提取三维数组各列最大突变点

MATLAB 实现每列仅保留1个最极端突变点的方法

原代码问题说明

你编写的代码仅对阈值做了单次增量判断:如果首次阈值得到的突变点数量大于1,仅会加一次步长重新计算,若加完之后突变点数量仍然大于1,不会继续升高阈值,因此无法实现目标。

实现方案

方案1:按需求循环升高阈值(符合你原本的逻辑)

把单次if判断替换为while循环,持续升高阈值直到对应列突变点数量≤1,同时增加边界判断避免阈值无限升高:

increment = 100;
max_threshold = 1e6; % 设置阈值上限,避免极端情况死循环
TF = false(size(ydisplacements)); % 预先初始化TF数组,提升效率

for i = 1:size(ydisplacements,2)
    for j = 1:size(ydisplacements,3)
        threshold = 100;
        % 循环升高阈值,直到突变点数量≤1或者达到阈值上限
        while true
            TF_col = ischange(ydisplacements(:,i,j),'Linear','Threshold',threshold);
            cnt = sum(TF_col);
            if cnt <= 1 || threshold >= max_threshold
                TF(:,i,j) = TF_col;
                break;
            end
            threshold = threshold + increment;
        end
        % 极端情况:阈值到上限后没有突变点,可按需补充逻辑选最大变化点,默认保留全0即可
    end
end

方案2:更高效的实现(无需循环调整阈值)

ischange支持输出第二个返回值,即每个点对应的突变偏差幅度,直接取幅度最大的点设为1即可,性能远高于循环调整阈值:

TF = false(size(ydisplacements));
for i = 1:size(ydisplacements,2)
    for j = 1:size(ydisplacements,3)
        [~, deviations] = ischange(ydisplacements(:,i,j),'Linear');
        [~, max_idx] = max(deviations); % 取偏差最大的位置,就是最极端的突变点
        TF(max_idx,i,j) = true;
    end
end

内容的提问来源于stack exchange,提问作者Chiddy Brendan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:45:01