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

如何保存随时间增长的矩阵?求无需更新表头的Octave/MATLAB文本格式

解决方案

以下两种纯文本格式完全兼容Octave/MATLAB,追加时间步数据时无需修改已有内容:

方案1:展平式CSV(推荐)

将每个时间步的3×4二维切片展平为长度12的行向量,每行对应一个时间步,无固定表头,追加数据直接在末尾加行即可。

存储示例

1,5,9,2,6,10,3,7,11,4,8,12
13,17,21,14,18,22,15,19,23,16,20,24

读写代码

追加新时间步:

% new_slice为当前新增的3×4时间切片
dlmwrite('time_series.csv', new_slice(:)', '-append', 'delimiter', ',');

读取全量3D矩阵:

raw_data = dlmread('time_series.csv');
time_steps = size(raw_data, 1);
A = reshape(raw_data', 3, 4, time_steps);

方案2:分块式Octave原生文本格式

每个时间步存储为独立的2D矩阵变量,命名采用A_t+序号的规则,追加数据直接在文件末尾拼接新的变量块即可,无需修改之前的内容。

存储示例

# Created by Octave 6.3.0, Wed Sep 01 10:30:13 2021 BST <pietrom@UNKNOWN>
# name: A_t1
# type: matrix
# rows: 3
# columns: 4
1 2 3 4
5 6 7 8
9 10 11 12

# name: A_t2
# type: matrix
# rows: 3
# columns: 4
13 14 15 16
17 18 19 20
21 22 23 24

读写代码

追加新时间步:

% new_slice为当前新增的3×4时间切片,t为当前时间步序号,写入前将new_slice重命名为A_t{序号}即可
save('-append', 'time_series.txt', 'new_slice', '-ascii', '-mat');

读取全量3D矩阵:

load('time_series.txt');
var_list = who('A_t*');
time_steps = length(var_list);
A = zeros(3,4,time_steps);
for i = 1:time_steps
    A(:,:,i) = eval(var_list{i});
end

方案对比

  • CSV格式更简洁、跨语言兼容性强、读写效率高,适合绝大多数场景
  • 分块原生格式无需手动处理维度重塑逻辑,可保留每个时间步的元信息,适合需要保留变量属性的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:12:01