当每行中的值数量不同时如何在 Matlab 中加载文本文件

How to load a text file in Matlab when the number of values in every line are different

我有一个像 A 这样的 none 矩形文本文件,它在第一行有 10 个值,在第二行有 14 个值,在第三行有 16 个值,依此类推。这是我的文本文件的 4 行示例:

第 1 行:

 1.68595314026 -1.48498177528 2.39820933342 27 20 15 2 4 62 -487.471069336 -517.781921387 5 96 -524.886108398 -485.697143555

第 2 行:

 1.24980998039 -0.988095104694 1.89048337936 212 209 191 2 1 989 -641.149658203 -249.001220703 3 1036 -608.681762695 -300.815673828 

第 3 行:

 8.10434532166 -4.81520080566 4.90576314926 118 115 96 3 0 1703 749.967773438 -754.015136719 1 1359 1276.73632813 -941.855895996 2 1497 1338.98852539 -837.659179688 

第 4 行:

 0.795098006725 -0.98456710577 1.89322447777 213 200 68 5 0 1438 -1386.39111328 -747.421386719 1 1565 -1153.50915527 -342.951965332 2 1481 -1341.57043457 -519.307800293 3 1920 -1058.8828125 -371.696960449 4 1303 -1466.5802002 -308.764587402 

现在,我想将此文本文件加载到 Matlab 中的矩阵 M 中。我厌倦了使用 importdata 函数来加载它

M = importdata('A.txt');

但它以矩形矩阵加载文件(所有行的列数都相同!!!)这是不正确的。预期创建的矩阵大小应该是这样的:

 size(M(1,:))= 1  10
 size(M(2,:))= 1  14
 size(M(3,:))= 1  16

如何以正确的方式将此文本文件加载到 Matlab 中?

正如@Jens 建议的那样,您应该使用元胞数组。假设您的文件仅包含由空格分隔的数值,例如:

1 3 6
7 8 9 12 15
1 2
0 3 7

您可以像这样将其解析为元胞数组:

% Read full file
str = fileread('A.txt'); 

% Convert text in a cell array of strings  
c = textscan(str, '%s', 'Delimiter', '\n');
c = c{1};

% Convert 'string' elements to 'double' 
n = cellfun(@str2num, c, 'UniformOutput', false)

然后您可以像这样访问各个行:

>> n{1}

ans =

     1     3     6

>> n{2}

ans =

     7     8     9    12    15