У меня есть цикл 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, не одинакова, поэтому добавление столбцов на каждой итерации затруднительно. Я мог бы сделать цикл в начале, который найдет самый большой размер столбца, а затем создать массив структуры / ячейки такого размера, если это поможет.