1

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

% 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 命令?

谢谢。

4

2 回答 2

1

如果文件名有一个共同的模式,您可以使用 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 语句中对文件进行一些额外的检查,以确保文件名正确。

于 2012-12-08T21:13:20.320 回答
1

假设您拥有csv文件夹中的所有文件d:/tmp,每个文件包含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));
于 2012-12-09T04:57:58.187 回答