获取许多矩阵(ASCII 文本文件)的最后一行,并从这些行创建一个新矩阵



我有超过一千个矩阵(6 x 2000,ASCII文件,逗号分隔)是从MATLAB生成的。 我想获取每个矩阵/文本文件的最后一行,并将它们保存在新的矩阵/文本文件中。 文本文件有疯狂的名称,所以当我加载它们时,我可以命名它们。 现在我会这样做来实现我的目标:

% A = load('crazyname.txt');
% B = load('crazynameagain.txt');
% C = load('crazynameyetagain.txt');
A = [5 5 5; 5 5 5; 1 1 1];
B = [5 5 5; 5 5 5; 2 2 2];
C = [5 5 5; 5 5 5; 3 3 3];
D(1,:)=A(end,:);
D(2,:)=B(end,:);
D(3,:)=C(end,:);

我将通过组合文本单元格来创建命令,从而在Excel中创建每个命令(例如加载,逐步构建D)。 有没有更好的方法可以做到这一点? 我是否可以加载/分配矩阵的名称更适合它们在 for 循环中使用? 还是其他一些 MATLAB 命令可以促进这一点?

谢谢。

假设您在文件夹 d:/tmp 中拥有所有csv文件,每个文件都包含6x2000

folder = 'd:/tmp';
files = dir(fullfile(folder, '*.csv'));
res = cell2mat(cellfun(@(x) csvread(fullfile(folder, x), 5, 0), {files.name}', 'UniformOutput', false));

请注意 csvread() 的参数。

编辑:如果分隔符是空格' '

res = cell2mat(cellfun(@(x) dlmread(fullfile(folder, x), ' ', 5, 0), {files.name}', 'UniformOutput', false));

如果文件名有通用架构,则可以使用 dir 函数获取它们的列表。从那里,一次加载一个并将它们放入数组中。您还需要首先知道有多少人,以进行预分配。完成后,这可能会缩小。把它们放在一起,你就有了这样的东西。

files=dir ('c:/somefolder/*.txt')
output=zeros(2000,length(files));
usedValue=false(zeros(1,length(files)));
for i=1:length(files)
    if (~files(i).isdir)
        dat=load(files(i).name);
        usedValue(i)=true;
        output(:,i)=dat(end,:);
    end
end
output=output(:,usedValue);

请注意,您可以在 if 语句中对文件进行一些额外的检查,以确保文件名正确。

最新更新