Convert a non uniform cell array of cell arrays to matrix

6 Ansichten (letzte 30 Tage)
Tessa Kol
Tessa Kol am 20 Sep. 2020
Beantwortet: Sindar am 25 Sep. 2020
I have the following code:
%% Loading the data
rhoPart = 2540;
files = dir(fullfile(uigetdir,'\**\*.data*'));
[~,Index] = natsort({});
files = files(Index);
folders = {files.folder};
folder_groups = findgroups(folders);
k = 1;
for i = 1:length(files)
fid = fopen(fullfile(files(i).folder,files(i).name),'r');
%% Reading the data
% Read all the data from the file
dataRead = textscan(fid,'%f %f %f %f %f %f %f %f %f %f %f %f %f %f','HeaderLines',1);
% Write headerline N, time, xmin, ymin, zmin, xmax, ymax, zmax
runData{k} = strsplit(fgetl(fid), ' ');
% Write only the x, y, and z components of the particles, particle radius,
% z component+ particle radius and volume of the particle
expData{k} = [dataRead{1}(:,1) dataRead{2}(:,1) dataRead{3}(:,1) dataRead{7}(:,1) dataRead{3}(:,1)+dataRead{7}(:,1) rhoPart*(4/3)*pi*(dataRead{7}(:,1).^3)];
% Write only the vx,vy,vz of the particles and magnitude
velData{k} = [dataRead{4}(:,1) dataRead{5}(:,1) dataRead{6}(:,1) sqrt(dataRead{4}(:,1).^2 + dataRead{5}(:,1).^2 + dataRead{6}(:,1).^2)];
k = k + 1;
%% Classify (into a structure)
runData_struc = splitapply(@(x) {x}, runData, folder_groups);
expData_struc = splitapply(@(x) {x}, expData, folder_groups);
velData_struc = splitapply(@(x) {x}, velData, folder_groups);
This will give me the following cell array of runData_struct (see pictures)
As you can see this is a cell array in a cell array. I want to convert the 1x9 cell into a 1x9 double. For example:
row 1: 1x9 double
row 2 :1x9 double
row 3: 1x9 double
row 2741: 1x9 double
row 1: 1x9 double
row 2 :1x9 double
row 3: 1x9 double
row 2745: 1x9 double
I tried the following, but it gave me NaN as result:
  9 Kommentare
Tessa Kol
Tessa Kol am 25 Sep. 2020
Thank you both for the suggestions and I will adapt my code according to it. Can I accept an answer to close this post?

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Sindar am 25 Sep. 2020
(see comments on question for details not related to the title question)
A1 = cell2mat(runData_struc{1});
A2 = cell2mat(runData_struc{2});
if that doesn't work, something like this might (but I'm not the cellfun expert)
A1 = cell2mat(cellfun(@cell2mat,runData_struc{1},'UniformOutput',false));
A2 = cell2mat(cellfun(@cell2mat,runData_struc{2},'UniformOutput',false));

Weitere Antworten (0)


Find more on Multidimensional Arrays in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by