Hello,
i have a 64x92690 EEG dataset that i want to split into 40 parts of 64x2048.
As 2048 times 40 isen't 92690, i've been having trouble with the reshape function.
C = num2cell(reshape(x, 2048, 64, 1);
The excess amount of data i dont really care about.
Any suggestions would help
Thanks in advaced!

1 Commento

Thanks to all that answered!
i ended up using
x = x(:,1:40*2048)
to simply change the data length and then use reshape, as that is a function im familliar with

Accedi per commentare.

 Risposta accettata

Stephan
Stephan il 19 Ott 2020
Modificato: Stephan il 19 Ott 2020
use this before reshaping - it discards all data, you dont care about:
x = x(:,1:40*2048)

1 Commento

Tim Johansson
Tim Johansson il 19 Ott 2020
Thanks!
no idea why i didnt think of this myself

Accedi per commentare.

Più risposte (2)

Stephen23
Stephen23 il 19 Ott 2020
Just use mat2cell, no need for reshape:
>> M = rand(64,92690); % fake data
>> N = 2048;
>> S = size(M);
>> V = repmat(N,1,fix(S(2)/N));
>> C = mat2cell(M,S(1),[V,mod(S(2),N)]);
Rik
Rik il 19 Ott 2020
Modificato: Rik il 19 Ott 2020
You can modify the row indices you feed to mat2cell:
data=rand(64,92690);%generate random data
div=2048;
c=div*ones(1,ceil(size(data,2)/div));
c(end)=c(end)-(sum(c)-size(data,2));%trim last block
split=mat2cell(data,size(data,1),c);
%split is a 1x46 cell array, with the last cell containing fewer elements if the data doesn't fit

Categorie

Community Treasure Hunt

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

Start Hunting!

Translated by