How to flatten and split and concatenate arrays in several files

73 visualizaciones (últimos 30 días)
Kong
Kong el 15 de Mzo. de 2020
Comentada: Kong el 16 de Mzo. de 2020
Hello.
I want to flatten and split and concatenate arrays in several files.
For example,
I have several datasets (237 x 40, 238 x 40, 239 x 40 ....)
1. I want to flatten each dataset
(237 x 40 -> 1 x 9480 , 238 x 40 => 1 x 9520, 239 x 40 = > 1 x 9560)
2. I want to split each datasets to minimum length among datasets.
1 x 9480, 1 x 9480, 1 x 9480
3. concatenate (3 x 9480)
I can do as several codes, but I have lots of data.
So I want to reduce the code.
clear all
close all
X = csvread('boxing/boxing50.csv');
Y = csvread('boxing/boxing51.csv');
Z = csvread('boxing/boxing52.csv');
% flatten
X = reshape(X,[],1);
Y = reshape(Y,[],1);
Z = reshape(Z,[],1);
% find the minimum and split to the minimum length
X = X(:,1:9480)
Y = Y(:,1:9480)
Z = Z(:,1:9480)
% concatenate
All = [X; Y; Z]
  1 comentario
Kong
Kong el 15 de Mzo. de 2020
Hello.
Before flattening each CSV file, I found that each file has a different size of the matrix.
(237 x 39 , 238 x 38 , 239 x 37 ...)
In other words, I want to find each minimum length of row and column and flatten them.
Before : 237 x 39 , 238 x 38 , 239 x 37 ...
After : 237 x 37 , 237 x 37 , 237 x 37 ...

Iniciar sesión para comentar.

Respuesta aceptada

Akira Agata
Akira Agata el 15 de Mzo. de 2020
Editada: Akira Agata el 15 de Mzo. de 2020
I think the following code can do that task:
By the way, your code will output 28440-by-1 (28440 = 9480 x 3), not the 3-by-9480. So the following code will generate N-by-1 array.
% Create the list of csv files
s = dir('boxing/*.csv');
% Read from each csv file
c = cell(numel(s),1);
for kk = 1:numel(s)
filePath = fullfile(s(kk).folder,s(kk).name);
x = csvread(filePath);
c{kk} = x(:);
end
% Find the minumul length
len = cellfun(@numel,c);
minLen = min(len);
% Delete minLen+1:end for each array in cell
c = cellfun(@(x) x(1:minLen),c,'UniformOutput',false);
% Concatenate them
All = cell2mat(c);
  8 comentarios
Akira Agata
Akira Agata el 16 de Mzo. de 2020
Oops!
Sorry, please change "c{kk} = x(:)" to "c{kk} = x".
Kong
Kong el 16 de Mzo. de 2020
Thank you so much!
I got it.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Tables en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by