1

MATLABから生成した1000を超える行列(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関数を使用してそれらのリストを取得できます。そこから、一度に1つずつロードし、アレイに配置します。また、事前に割り当てるには、最初にいくつあるかを知る必要があります。これは、完了後に縮小される可能性があります。それをすべてまとめると、このようなものができます。

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 に答える