将MATLAB中的文本文件中的数据读取到不同大小的矩阵

将MATLAB中的文本文件中的数据读取到不同大小的矩阵,matlab,matrix,text-parsing,Matlab,Matrix,Text Parsing,大家好,我在matlab中遇到了一个问题 我有一个文本文件,其中的数据由空格分隔。举例如下: 3 4 1 3 6 2 4 5 7 1 3 0 0 0 -1 -2 1 -1 0 -1 -1 0 -2 0 1 -1 2 3 1 我要做的是读取文本文件并生成如下矩阵: size_mat=[3,4]; B=[1,3,6]; NB=[2,4,5,7]; b=[1,3,0]; A=[0, 0, -1, -2; 1, -1, 0, -1; -1, 0, -2, 0]; z=[1,-1,2,3,1

大家好,我在matlab中遇到了一个问题

我有一个文本文件,其中的数据由空格分隔。举例如下:

3 4
1 3 6
2 4 5 7
1 3 0
0 0 -1 -2
1 -1 0 -1
-1 0 -2 0
1 -1  2 3 1
我要做的是读取文本文件并生成如下矩阵:

size_mat=[3,4];
B=[1,3,6];
NB=[2,4,5,7];
b=[1,3,0];
A=[0, 0, -1, -2;
   1, -1, 0, -1;
  -1, 0, -2, 0];
z=[1,-1,2,3,1];

%//In details I can highlight these points : 
%//1st line is the size_mat matrix. This has always dimension 1X2. m=size_mat(1) & n=size_mat(2)
%//2nd line is the B matrix. Dimension is 1Xm 
%//3rd line is the NB matrix Dimension is 1Xn
%//4th line is the b matrix  Dimension is 1Xm
%//Starting from 5th line to the (last-1) line is my A matrix 
%//whose size is actually equal to mXn where m=size_mat(1) & n=size_mat(2)
%//Last line is the z matrix Dimension is 1X(n+1)
我怎样才能做到这一点

提前谢谢


请检查编辑。更新了要提取的矩阵的大小

考虑到您相信您的输入文件总是这样的结构,那么您应该使用fgetlfile_描述符逐行读取您的文件。然后可以使用空格作为分隔符拆分每行字符串


最后,对于矩阵A,您只需要将这些行附加到该矩阵,直到到达最后一行

让我们一步一步来:

首先,我们将这些行读作字符串:

fid = fopen(filename, 'r');
C = textscan(fid, '%s', 'Delimiter', '\n');
fclose(fid);
然后我们将这些线转换为数值:

C = cellfun(@str2num, C{:}, 'UniformOutput', false);
要将这些值组合成矩阵,我们可以这样做:

size_mat = C{1};
B = C{2};
NB = C{3};
b = C{4};
A = vertcat(C{5:end - 1}); %// or: A = cell2mat(C(5:end - 1));
z = C{end};

希望这有帮助

你事先知道一些关于矩阵的知识吗?比如,事实上1x2是尺寸,1x4是NB,第一个1x3是B…等等。。。?因为如果你不知道这个文件是什么样子,以及你的矩阵最终应该是什么样子,那么你就不能完全按照你在编辑这个问题时所描述的那样去做。请一定要调查一下。要提取的矩阵的大小要事先知道。具体来说,它是从第一行本身就知道的。是否有任何方法可以计算文本文件中的行数?它不适用于我的数据集,因为文件中给出的分隔符是空格。你知道我怎样才能解决这个问题吗??