0

行数が異なる大きな配列があり、分割して複数のファイルにエクスポートしたいと考えています。

reshape コマンドを使用することを考えていましたが、これが機能するには、配列が同じ数の行を持つ必要があり、常にそうであるとは限らないことに気付きました。

clear all, clc,clf,tic
num_elm = 11;
num_elm_split = 4;  %Splits into columns
t = linspace(1, num_elm, num_elm)';

v = reshape(t, num_elm_split,[]); %Will split array into different columns
%'for' loop to split number of elements
for ii = 1:length(t(:, 1))
    ii
end

例:

11個の値の配列がある場合

a = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11]

そして、3 つの値ごとに分割して、データをファイルに出力したいと考えています。

output1.txtには 1 2 3が含まれます

output2.txtには 4 5 6が含まれます

output3.txtには 7 8 9が含まれます

output4.txtには 10 11が含まれます

Linux でsplitコマンドを使用できることはわかっていますが、 MATLAB/ Octaveコードのみを使用しようとしています。

4

2 に答える 2

2

基本的な考え方は、次のようにすることです。

values = 1 : 11;
binSize = 3;
fileNum = 1;
n = numel(values);
for i = 1 : binSize : n
   part = values(i : min(n, i + binSize - 1));
   fprintf('File %d contains %s\n', fileNum, mat2str(part));
   fileNum = fileNum + 1;
end

出力:

File 1 contains [1 2 3]
File 2 contains [4 5 6]
File 3 contains [7 8 9]
File 4 contains [10 11]

もちろん、実際にデータをディスクに保存するには、ループ内のコードを調整する必要があります。

于 2013-04-19T15:42:41.577 に答える
0

これがコードです...これは他の誰かを助けるかもしれません

clear all, clc,clf,tic
filesoxplaylistStr='1soxplaylist.pls'; %playlistist filename fix
dirplstmp='/tmp/tmp/';

values = 1 : 11;
binSize = 3;
fileNum = 0;
n = numel(values);
for ii = 1 : binSize : n
    part = values(ii : min(n, ii + binSize - 1))';
    fileNum = fileNum + 1
    %open file to write to
    fidsoxpl = fopen(strcat(dirplstmp,filesoxplaylistStr), 'w'); %create and open file to write to for sox playlist join file
    for jj=1:length(part)
        part_val=part(jj,1) %gets individual filename or values

        %create sox file to join
        fprintf(fidsoxpl,'File%s=%s%s.wav',num2str(jj),dirplstmp,num2str(part_val,'%06d'));%create playlist data file
        fprintf(fidsoxpl,'\n');

    end
    % close file to write to
    fclose(fidsoxpl);

    fn=strcat('test',num2str(fileNum,'%02d'));
    %join files with sox
    syscmd=strcat({'sox '},dirplstmp ,filesoxplaylistStr, {' '},dirplstmp,fn,{'.wav'});
    system(syscmd);

    %add freq to file name


end
于 2013-04-19T22:04:49.337 に答える