如何保存随时间增长的矩阵?
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 中发生变化。
我有一个三维矩阵,它的第三维是时间,它会随着时间的推移而增长。将此文件保存在 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 中发生变化。