MATLAB Answers

Splitting an array up

7 views (last 30 days)
Tim Johansson
Tim Johansson on 19 Oct 2020
Commented: Tim Johansson on 19 Oct 2020
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 Comment
Tim Johansson
Tim Johansson on 19 Oct 2020
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

Sign in to comment.

Accepted Answer

Stephan
Stephan on 19 Oct 2020
Edited: Stephan on 19 Oct 2020
use this before reshaping - it discards all data, you dont care about:
x = x(:,1:40*2048)
  1 Comment
Tim Johansson
Tim Johansson on 19 Oct 2020
Thanks!
no idea why i didnt think of this myself

Sign in to comment.

More Answers (2)

Stephen Cobeldick
Stephen Cobeldick on 19 Oct 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 on 19 Oct 2020
Edited: Rik on 19 Oct 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

Community Treasure Hunt

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

Start Hunting!