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