我有一个代码,但我不知道如何让每个文本文件作为矩阵中的不同列放置。
例如,我有5个文本文件,所有文件只有一列。如何将每个列放入单个矩阵中?我写的代码如下,但它不起作用:
for k = 1:5
textFilename = ['file' num2str(k) '.txt'];
fid = fopen(textFilename, 'rt');
textData = fread(fid);
fclose(fid);
end
答案 0 :(得分:1)
我假设从所有文本文件读入的数据长度相同。如果是这种情况,那么您所要做的就是创建一个空矩阵,然后逐列连接结果。你只需要添加两行。
% Store the text data here
textDataMatrix = [];
for k = 1:5
textFilename = ['file' num2str(k) '.txt'];
fid = fopen(textFilename, 'rt');
textData = fread(fid);
% Concatenate text file data by column
textDataMatrix = [textDataMatrix textData];
fclose(fid);
end
在此脚本的末尾,textDataMatrix
将包含您想要的文本数据,并根据需要放置在不同的列中。
NB:创建一个空矩阵通常很糟糕,因为它被认为很慢,所以填充你的项目。如果您在运行此代码之前确实知道单个数据文件中有多少字符/字节/数字,这将有所帮助。执行此操作时,可以在运行for
循环之前预先分配所需的内存量。在填充矩阵之前创建适量的空间在MATLAB中更有效,而不是连接元素。如果您想这样做,假设您在数据文件中拥有的元素数量称为numElements
。您可以通过以下方式重写我上面编写的代码:
% Store the text data here
textDataMatrix = zeros(numElements, 5);
for k = 1:5
textFilename = ['file' num2str(k) '.txt'];
fid = fopen(textFilename, 'rt');
textData = fread(fid);
% Place the k'th text data in the k'th column
textDataMatrix(:,k) = textData;
fclose(fid);
end
但是,如果特定文本文件中没有那么多元素,那么上面代码的第一个版本就可以了。