Добавление столбцов разной длины в массив ячеек в цикле и их маркировка - PullRequest
0 голосов
/ 04 мая 2018

У меня есть цикл for, где я извлекаю некоторые данные из файлов .csv:

    % Startup
clearvars;

stress_folder = uigetdir(path,'Select STRESS folder');
strain_folder = uigetdir(path,'Select STRAIN folder');

prompt = {'Plot name:','x label (strain):','y label (stress):','Name of STRAIN values:','Name of STRESS values:'};
dlg_title = 'Input';
num_lines = 1;
defaultans = {'Title','x label','y label','Surface component 1.avg(epsY) [True strain]','Stress'};
answer = inputdlg(prompt,dlg_title,num_lines,defaultans);

filePattern = sprintf('%s/*.csv', stress_folder);
stress_file_list = dir(filePattern);
filePattern = sprintf('%s/*.csv', strain_folder);
strain_file_list = dir(filePattern);

name_plot = answer{1};
x_label = answer{2};
y_label = answer{3};
strain_col = answer{4};
stress_col = answer{5};

des_cols = {stress_col,strain_col};
smallest_n = 100000;
avg_stress_values = [];
avg_strain_values = [];
ii=0;

% Determine smallest set of data
for file = stress_file_list'

    M = xlsread(fullfile(stress_folder,file.name));
    [row,col] = size(M);
    if smallest_n > row
        smallest_n = row;
    end
end
for file = strain_file_list'
    M=xlsread(fullfile(strain_folder,file.name));
    [row,col]=size(M);
    if smallest_n > row
        smallest_n = row;
    end
end

% Extract columns
for file = stress_file_list'
    ii = ii + 1;
    [n,s,r] = xlsread(fullfile(stress_folder,file.name));
    [row, col] = find(strcmpi(s,stress_col));
    stress_values = n(1:end,col);
    avg_stress_values(:,ii)=stress_values(1:smallest_n);
    % place for code to store stress_values in a cell array or structure array at column index ii
end
ii=0;
for file = strain_file_list'
    ii = ii + 1;
    [n,s,r] = xlsread(fullfile(strain_folder,file.name));
    [row, col] = find(strcmpi(s,strain_col));
    strain_values = n(1:end,col);
    avg_strain_values(:,ii)=strain_values(1:smallest_n);
    % place for code to store strain_values in a cell array or structure array at column index ii
end

% Plot the averages
ylabel({y_label});
xlabel({x_label});
title({name_plot});
colormap(gray);
hold off;

avg_strain_values = mean(avg_strain_values,2);
avg_stress_values = mean(avg_stress_values,2);
plot(avg_strain_values,avg_stress_values);
set(gca,'FontSize',20);
ylabel({y_label});
xlabel({x_label});
title({name_plot});

В разделе извлечения столбцов я хотел бы сохранить все данные в ... элементе из-за отсутствия лучшего слова, а затем построить его. Из того, что я понимаю, я мог бы использовать структурные массивы или массивы ячеек, но я не уверен, какой из них лучше подходит моей цели. Я не уверен, что было бы лучше создать два массива ячеек, один для напряжения, другой для напряжения, или структурный массив с полями для напряжения и напряжения и подполями для каждого набора данных.

Проблема в том, что длина столбцов данных, извлеченных из файлов .csv, не одинакова, поэтому добавление столбцов на каждой итерации затруднительно. Я мог бы сделать цикл в начале, который найдет самый большой размер столбца, а затем создать массив структуры / ячейки такого размера, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...