如何保存随时间增长的矩阵?

How can I save a matrix which grows in time?

我有一个三维矩阵,它的第三维是时间,它会随着时间的推移而增长。将此文件保存在 real-time 中的一种方法是使用以下格式:

# Created by Octave 6.3.0, Wed Sep 01 10:30:13 2021 BST <pietrom@UNKNOWN>
# name: A
# type: matrix
# ndims: 3
 3 4 2
 1
 5
 9
 2
 6
 10
 3
 7
 11
 4
 8
 12
 13
 17
 21
 14
 18
 22
 15
 19
 23
 16
 20
 24

其中时间维度是第三个。这里我展示了 2 个时间步。

要添加另一个时间步长,我应该更新指定矩阵大小的行,即从“3 4 2”到“3 4 3”,并将新数据附加到文件末尾。

但是这种方法并不是最优的。是否有一种(基于文本的)Octave/MATLAB 文件格式不需要为每次插入更新 header?

由于您已经知道前两个维度的大小,您可以简单地将新的时间步长(或时间步长块)附加为列向量,或者为了可读性更好的行向量。

A = rand(3, 4, 100);
Nblock = 5;  % number of time steps to be written as a block
fmt = [repmat('%.4f \t', [1, size(A, 1)*size(A, 2)]), '\n']; % or whatever format you want to write your data in

fid = fopen('test.txt', 'a');
fprintf(fid, 'Your header');
for i = 1:size(A, 3)/Nblock
    idx = (i - 1)*Nblock;
    for j = 1:Nblock
        fprintf(fid, fmt, reshape(A(:, :, idx + j), [1, size(A, 1)*size(A, 2)]));
    end
end
fclose(fid);

请注意,这是用 Matlab 编写的,某些命令可能会在 Octave 中发生变化。