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

Octave循环迭代中如何存储每次循环的epochs与metrics矩阵?

Octave中保存每次循环的epochs和metrics数据

问题分析

你的代码中epochs和metrics都是二维矩阵,每次循环会直接覆盖之前的内容,因此最终只保留了第20次循环的结果。要保存20次迭代的全部数据,需要通过扩展数据维度来存储每次迭代的独立结果,推荐两种实现方式:


方案1:三维数组存储(推荐,结构规整)

利用三维数组的第三维区分不同迭代次数的数据,预分配内存时直接指定第三维长度为20:

# 预分配三维数组:行(15000) × 列(19) × 迭代次数(20)
epochs = zeros(15000, 19, 20);
# 预分配指标三维数组:指标数(3) × 列(19) × 迭代次数(20)
metrics = zeros(3, 19, 20);

for i = 1:20
  start_idx = (i - 1) * epoch_length + 1;
  end_idx = start_idx + epoch_length - 1;
  # 将第i次迭代的完整19列数据存入三维数组的第i层
  epochs(:,:,i) = patient1(start_idx:end_idx, :);
  
  # 计算当前迭代的均值、标准差、方差
  meanValue = mean(epochs(:,:,i), 1); 
  stdValue = std(epochs(:,:,i), 0, 1); 
  varValue = var(epochs(:,:,i), 0, 1); 

  # 存储当前迭代的指标到三维数组对应层
  metrics(1,:,i) = meanValue;
  metrics(2,:,i) = stdValue;
  metrics(3,:,i) = varValue;
end

访问方式:

  • 取第5次迭代的epochs数据:epochs(:,:,5)
  • 取第5次迭代的均值数据:metrics(1,:,5)

方案2:单元格数组存储(灵活,适配可变维度数据)

如果后续迭代的数据维度可能变化,用单元格数组更灵活,每个单元格存储一次迭代的完整数据:

# 预分配20个元素的单元格数组,每个元素存一次迭代的epochs
epochs = cell(20, 1);
# 预分配20个元素的单元格数组,每个元素存一次迭代的metrics
metrics = cell(20, 1);

for i = 1:20
  start_idx = (i - 1) * epoch_length + 1;
  end_idx = start_idx + epoch_length - 1;
  # 存储第i次迭代的epochs数据
  epochs{i} = patient1(start_idx:end_idx, :);
  
  # 计算当前迭代的指标
  meanValue = mean(epochs{i}, 1); 
  stdValue = std(epochs{i}, 0, 1); 
  varValue = var(epochs{i}, 0, 1); 

  # 将指标组合成矩阵存入单元格
  metrics{i} = [meanValue; stdValue; varValue];
end

访问方式:

  • 取第5次迭代的epochs数据:epochs{5}
  • 取第5次迭代的metrics数据:metrics{5}

注意事项

原代码存在一个潜在错误:初始epochs是15000行19列,但循环次数是20次,当i>19时epochs(:,i)会超出列数导致索引错误,上述两种方案均已修复该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:15:30