保存和加载 3D 矩阵的方法
approach to save and load a 3D matrix
我需要将 3D 矩阵保存在一个文本文件中,该文件将加载到 Matlab(我不掌握)中。我的第一个想法是用这样的 .csv 来做,(考虑一个 3x3x3 矩阵):
row 1: v[0][0][0],v[0][0][1] ,v[0][0][2]
row 2: v[0][1][0],v[0][1][1] ,v[0][1][2]
row 3: v[0][2][0],v[0][2][1] ,v[0][2][2]
row4: v[1][0][0],v[1][0][1] ,v[1][0][2]
...
像这样,我必须分别告知用户x和y维度的数量。不太干净,但不是大戏。
我的问题是,如何在 Matlab 中加载和绘制这样的数据集?值为 1/0。
有没有更聪明的方法来做到这一点。我正在从 Java.
导出
谢谢!
我想不出一种可以省略存储矩阵维度的方法(至少应提及其中两个维度)。但是当谈到将值存储在文件中时,我建议您甚至不必费心将它们写成表格格式。关于 MATLAB,您需要了解的只是矩阵中元素的顺序。看看这个例子:
%% create a 3d matrix
% a = 1+randi(5);
% b = 1+randi(5);
% c = 1+randi(5);
a = 2; b = 3; c = 4;
M = reshape(1:a*b*c, a, b, c)
矩阵是这样的:
M(:,:,1) =
1 3 5
2 4 6
M(:,:,2) =
7 9 11
8 10 12
M(:,:,3) =
13 15 17
14 16 18
M(:,:,4) =
19 21 23
20 22 24
现在让我们把它写在一个文本文件中:
%% writing matrix in the text file,
% translate it to your target language
fid = fopen('matrix.txt', 'w');
fprintf(fid, '%d,%d,%d\n', a, b, c);
for k=1:c
for j=1:b
for i=1:a
fprintf(fid, '%-.8g\n', M(i, j, k));
end
end
end
fclose(fid);
这是文件的内容:
2,3,4
1
2
3
4
...
21
22
23
24
现在,读取文件:
%% read the file back in MATLAB
fid = fopen('matrix.txt', 'r');
sz = str2num(fscanf(fid, '%s\n', 1)); % read dimensions
M2 = reshape(fscanf(fid, '%f\n', inf), sz); % read values
fclose(fid);
%% test the imported matrix
disp(sz)
if all(all(all(M == M2)))
disp('OK')
else
disp('Test failed.')
end
我需要将 3D 矩阵保存在一个文本文件中,该文件将加载到 Matlab(我不掌握)中。我的第一个想法是用这样的 .csv 来做,(考虑一个 3x3x3 矩阵):
row 1: v[0][0][0],v[0][0][1] ,v[0][0][2]
row 2: v[0][1][0],v[0][1][1] ,v[0][1][2]
row 3: v[0][2][0],v[0][2][1] ,v[0][2][2]
row4: v[1][0][0],v[1][0][1] ,v[1][0][2]
...
像这样,我必须分别告知用户x和y维度的数量。不太干净,但不是大戏。
我的问题是,如何在 Matlab 中加载和绘制这样的数据集?值为 1/0。
有没有更聪明的方法来做到这一点。我正在从 Java.
导出谢谢!
我想不出一种可以省略存储矩阵维度的方法(至少应提及其中两个维度)。但是当谈到将值存储在文件中时,我建议您甚至不必费心将它们写成表格格式。关于 MATLAB,您需要了解的只是矩阵中元素的顺序。看看这个例子:
%% create a 3d matrix
% a = 1+randi(5);
% b = 1+randi(5);
% c = 1+randi(5);
a = 2; b = 3; c = 4;
M = reshape(1:a*b*c, a, b, c)
矩阵是这样的:
M(:,:,1) =
1 3 5 2 4 6
M(:,:,2) =
7 9 11 8 10 12
M(:,:,3) =
13 15 17 14 16 18
M(:,:,4) =
19 21 23 20 22 24
现在让我们把它写在一个文本文件中:
%% writing matrix in the text file,
% translate it to your target language
fid = fopen('matrix.txt', 'w');
fprintf(fid, '%d,%d,%d\n', a, b, c);
for k=1:c
for j=1:b
for i=1:a
fprintf(fid, '%-.8g\n', M(i, j, k));
end
end
end
fclose(fid);
这是文件的内容:
2,3,4
1
2
3
4
...
21
22
23
24
现在,读取文件:
%% read the file back in MATLAB
fid = fopen('matrix.txt', 'r');
sz = str2num(fscanf(fid, '%s\n', 1)); % read dimensions
M2 = reshape(fscanf(fid, '%f\n', inf), sz); % read values
fclose(fid);
%% test the imported matrix
disp(sz)
if all(all(all(M == M2)))
disp('OK')
else
disp('Test failed.')
end