当每行中的值数量不同时如何在 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
我有一个像 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