0

既知の構造 (8,12000,real*4) のバイナリ ファイルがいくつかあります。8 は変数の数で、12000 はタイム ステップを表します。これらのバイナリから、次のように定義された最終的な 16x9 マトリックスを取得する必要があります。

  • 最初の列には、ファイル名の識別が含まれます。
  • 対角線には、対応する変数の極値 (最大値と最小値) があります。
  • 他の変数の同時値は、行で与えられるものとします。

現時点では、このコードを使用しています

               for i = 1:num_files
    for j = 1:num_ext
        fid = fopen([fullfile(BEGINPATH{1},FILELIST{i}) '.$' VAREXTENSION{j}],'r');
        A = fread(fid,[DLC_dimens{i}{3}(1) DLC_dimens{i}{3}(2)],'real*4');
        for k = 1:size(A,1)
            [max_val(k,i) max_idx(k,i)] = max(A(k,:));
            [min_val(k,i) min_idx(k,i)] = min(A(k,:));
        end
        fclose(fid);
    end
end

% Pre-allocate ULS matrices
uloads = cell(2*size(A,1),size(A,1)+1);
uloads_temp = cell(2*size(A,1),size(A,1)+1);

% Generate ULS matrix for the first file
for i = 1:size(uloads,1)
    uloads{i,end} = DLC_dimens{1}(1);
end

fid = fopen([fullfile(BEGINPATH{1},FILELIST{1}) '.$' VAREXTENSION{1}],'r');
A = fread(fid,[DLC_dimens{i}{3}(1) DLC_dimens{i}{3}(2)],'real*4');


for j = 1:size(uloads,2)-1
    uloads{1,j} = A(j,max_idx(1,1))*DLC_dimens{1}{4};
    uloads{2,j} = A(j,min_idx(1,1))*DLC_dimens{1}{4};
    uloads{3,j} = A(j,max_idx(2,1))*DLC_dimens{1}{4};
    uloads{4,j} = A(j,min_idx(2,1))*DLC_dimens{1}{4};
    uloads{5,j} = A(j,max_idx(3,1))*DLC_dimens{1}{4};
    uloads{6,j} = A(j,min_idx(3,1))*DLC_dimens{1}{4};
    uloads{7,j} = A(j,max_idx(4,1))*DLC_dimens{1}{4};
    uloads{8,j} = A(j,min_idx(4,1))*DLC_dimens{1}{4};
    uloads{9,j} = A(j,max_idx(5,1))*DLC_dimens{1}{4};
    uloads{10,j} = A(j,min_idx(5,1))*DLC_dimens{1}{4};
    uloads{11,j} = A(j,max_idx(6,1))*DLC_dimens{1}{4};
    uloads{12,j} = A(j,min_idx(6,1))*DLC_dimens{1}{4};
    uloads{13,j} = A(j,max_idx(7,1))*DLC_dimens{1}{4};
    uloads{14,j} = A(j,min_idx(7,1))*DLC_dimens{1}{4};
    uloads{15,j} = A(j,max_idx(8,1))*DLC_dimens{1}{4};
    uloads{16,j} = A(j,min_idx(8,1))*DLC_dimens{1}{4};
end
fclose(fid);

% ULS temporary matrix generation
uls = uloads;

for i = 2:num_files
    fid = fopen([fullfile(BEGINPATH{1},FILELIST{i}) '.$' VAREXTENSION{1}],'r');
    A = fread(fid,[8 12000],'float32');
    for j = 1:size(uloads,1)
        uloads_temp{j,9} = DLC_dimens{i}(1);
    end
    for k = 1:size(uloads,2)-1
        uloads_temp{1,k} = A(k,max_idx(1,i))*DLC_dimens{i}{4};
        uloads_temp{2,k} = A(k,min_idx(1,i))*DLC_dimens{i}{4};
        uloads_temp{3,k} = A(k,max_idx(2,i))*DLC_dimens{i}{4};
        uloads_temp{4,k} = A(k,min_idx(2,i))*DLC_dimens{i}{4};
        uloads_temp{5,k} = A(k,max_idx(3,i))*DLC_dimens{i}{4};
        uloads_temp{6,k} = A(k,min_idx(3,i))*DLC_dimens{i}{4};
        uloads_temp{7,k} = A(k,max_idx(4,i))*DLC_dimens{i}{4};
        uloads_temp{8,k} = A(k,min_idx(4,i))*DLC_dimens{i}{4};
        uloads_temp{9,k} = A(k,max_idx(5,i))*DLC_dimens{i}{4};
        uloads_temp{10,k} = A(k,min_idx(5,i))*DLC_dimens{i}{4};
        uloads_temp{11,k} = A(k,max_idx(6,i))*DLC_dimens{i}{4};
        uloads_temp{12,k} = A(k,min_idx(6,i))*DLC_dimens{i}{4};
        uloads_temp{13,k} = A(k,max_idx(7,i))*DLC_dimens{i}{4};
        uloads_temp{14,k} = A(k,min_idx(7,i))*DLC_dimens{i}{4};
        uloads_temp{15,k} = A(k,max_idx(8,i))*DLC_dimens{i}{4};
        uloads_temp{16,k} = A(k,min_idx(8,i))*DLC_dimens{i}{4};
    end
    if uloads_temp{1,1}(:) > uls{1,1}(:)
        uls(1,:) = uloads_temp(1,:);
    end

    if uloads_temp{2,1}(:) < uls{2,1}(:)
        uls(2,:) = uloads_temp(2,:);
    end

    if uloads_temp{3,2}(:) > uls{3,2}(:)
        uls(3,:) = uloads_temp(3,:);
    end

    if uloads_temp{4,2}(:) < uls{4,2}(:)
        uls(4,:) = uloads_temp(4,:);
    end

    if uloads_temp{5,3}(:) > uls{5,3}(:)
        uls(5,:) = uloads_temp(5,:);
    end

    if uloads_temp{6,3}(:) < uls{6,3}(:)
        uls(6,:) = uloads_temp(6,:);
    end

    if uloads_temp{7,4}(:) > uls{7,4}(:)
        uls(7,:) = uloads_temp(7,:);
    end

    if uloads_temp{8,4}(:) < uls{8,4}(:)
        uls(8,:) = uloads_temp(8,:);
    end

    if uloads_temp{9,5}(:) > uls{9,5}(:)
        uls(9,:) = uloads_temp(9,:);
    end

    if uloads_temp{10,5}(:) < uls{10,5}(:)
        uls(10,:) = uloads_temp(10,:);
    end

    if uloads_temp{11,6}(:) > uls{11,6}(:)
        uls(11,:) = uloads_temp(11,:);
    end

    if uloads_temp{12,6}(:) < uls{12,6}(:)
        uls(12,:) = uloads_temp(12,:);
    end

    if uloads_temp{13,7}(:) > uls{13,7}(:)
        uls(13,:) = uloads_temp(3,:);
    end

    if uloads_temp{14,7}(:) < uls{14,7}(:)
        uls(14,:) = uloads_temp(14,:);
    end

    if uloads_temp{15,8}(:) > uls{15,8}(:)
        uls(15,:) = uloads_temp(15,:);
    end

    if uloads_temp{16,8}(:) < uls{16,8}(:)
        uls(16,:) = uloads_temp(16,:);
    end
    fclose(fid);
end

ここで質問です。私は手順を考えていました。

  1. 最初のファイルだけで一時的な uloads_temp マトリックスを生成します。
  2. i 番目のファイルの uloads 行列を計算します (i = 2:num_files)
  3. i 番目の uloads 行列と一時的な uloads_temp の間の対角線上の項を比較します。a) i 番目の ulaods の要素がそれぞれの uloads_temp 値よりもメジャー (マイナー) である場合、b) uloads_temp 行を更新すると、a) の条件が発生します。

すべてを適切に説明したことを願っています。説明されているループを実行する方法のヒントを教えてください。

よろしくお願いします。

WKR、フランチェスコ

PS : 乱数で満たされた行列を使用して、すべてを再現できます。ファイルリストを参照してコードをコピーして貼り付けました。

4

0 に答える 0