How to split the data inside the matrix correctly?
1 回表示 (過去 30 日間)
古いコメントを表示
Hi! I have a matrix with two columns, the first one is time and the second one is trigger which has only 0 and 1. I want to split the data intro the groups that the first few zeros will be one group, then the first 1s will be next group, then the zeros again will be another group and so on. For example the matrix A is:
0 0
2.53164556962025 0
5.06329113924051 0
7.59493670886076 0
10.1265822784810 1
12.6582278481013 1
15.1898734177215 1
17.7215189873418 0
20.2531645569620 0
22.7848101265823 0
25.3164556962025 1
27.8481012658228 1
30.3797468354430 1
32.9113924050633 1
35.4430379746836 1
37.9746835443038 0
40.5063291139241 0
43.0379746835443 1
45.5696202531646 1
48.1012658227848 1
50.6329113924051 1
So the in the end I want to get 6 different matrices: the first one will be with first 4 zeros, the next one with 3 ones, then with 3 zeros, then with 5 ones and so on.
Thanks for your help!
0 件のコメント
採用された回答
Tommy
2020 年 5 月 28 日
Here's another uglier way.
C = mat2cell(matrix, diff([0; find(diff(matrix(:,2))); size(matrix,1)]), 2);
その他の回答 (1 件)
KSSV
2020 年 5 月 28 日
Try this loop....I quicky typed it..check thorughly.
data = [0 0
2.53164556962025 0
5.06329113924051 0
7.59493670886076 0
10.1265822784810 1
12.6582278481013 1
15.1898734177215 1
17.7215189873418 0
20.2531645569620 0
22.7848101265823 0
25.3164556962025 1
27.8481012658228 1
30.3797468354430 1
32.9113924050633 1
35.4430379746836 1
37.9746835443038 0
40.5063291139241 0
43.0379746835443 1
45.5696202531646 1
48.1012658227848 1
50.6329113924051 1];
iwant = cell([],1) ; % initialize the final result into cells
N = size(data,1) ;
count = 1 ;
pos = 0 ;
val = data(:,1) ;
for i = 1:N
val1 = data(i,2) ;
if val ~= val1
count = count+1 ;
val = val1;
pos = 0 ;
end
pos = pos+1 ;
iwant{count}(pos,1:2) = data(i,:) ;
end
iwant
0 件のコメント
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!