保存和加载 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