Splitting an array up

1 回表示 (過去 30 日間)
Tim Johansson
Tim Johansson 2020 年 10 月 19 日
コメント済み: Tim Johansson 2020 年 10 月 19 日
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 件のコメント
Tim Johansson
Tim Johansson 2020 年 10 月 19 日
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

サインインしてコメントする。

採用された回答

Stephan
Stephan 2020 年 10 月 19 日
編集済み: Stephan 2020 年 10 月 19 日
use this before reshaping - it discards all data, you dont care about:
x = x(:,1:40*2048)
  1 件のコメント
Tim Johansson
Tim Johansson 2020 年 10 月 19 日
Thanks!
no idea why i didnt think of this myself

サインインしてコメントする。

その他の回答 (2 件)

Stephen23
Stephen23 2020 年 10 月 19 日
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 2020 年 10 月 19 日
編集済み: Rik 2020 年 10 月 19 日
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

カテゴリ

Help Center および File ExchangeData Type Conversion についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by