Hi,
I am trying to split some data in x,y,z:
x = [351;333;337;341;346;350;354;359;363;368;372;377];
y = [145;180;182;184;186;188;190;192;194;195;197;198];
z = [31;31;30;28;28;26;24;23;21;20;19;18];
based on the values of another array named data:
data = [0,0,0,2,0,0,1,0,0,0,0,0];
So that when data = 2, the following values of x, y and z are calculated until data = 1. So in this case the data would be split into the following:
When data hits equal to 2:
x = [351;333;337;341];
y = [145;180;182;184];
z = [31;31;30;28];
And then up until data = 1:
x = [346;350;354];
y = [186;188;190];
z = [28;26;24];
and finally the after 1..
x = [359;363;368;372;377];
y = [192;194;195;197;198];
z = [23;21;20;19;18];
However I am really struggling getting this to work, it either extrapolates x, y and z when data is equal to 2 or brings up errors. Any help would be appreciated.
Cheers

2 Kommentare

Jos (10584)
Jos (10584) am 14 Dez. 2017
What do you want to with the subarrays? Store them, use them for input to a function?
Morgan Roberts
Morgan Roberts am 14 Dez. 2017
I want to store them

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

KL
KL am 14 Dez. 2017
Bearbeitet: KL am 14 Dez. 2017

1 Stimme

Or use mat2cell,
res = mat2cell([x y z].',3,diff([0 find(data) numel(data)]))
you get the result in a cell array, each cell containing the data split you want
>> res{1}
351 333 337 341
145 180 182 184
31 31 30 28
>> res{2}
346 350 354
186 188 190
28 26 24
>> res{3}
359 363 368 372 377
192 194 195 197 198
23 21 20 19 18

Weitere Antworten (1)

Jos (10584)
Jos (10584) am 14 Dez. 2017

1 Stimme

This splits the x,y, and z values into separate blocks:
x = [351;333;337;341;346;350;354;359;363;368;372;377];
y = [145;180;182;184;186;188;190;192;194;195;197;198];
z = [31;31;30;28;28;26;24;23;21;20;19;18];
data = [0,0,0,2,0,0,1,0,0,0,0,0];
p = cumsum([0 data(1:end-1)]~=0) + 1 ;
c = arrayfun(@(k) struct('x', x(p==k), 'y', y(p==k), 'z', z(p==k)), 1:p(end), 'un', 0) ;
s = cat(1,c{:})
The structure s holds the three blocks of (x,y,z) as specified by data. For instance, s(1).x holds the x values from the beginning up to the first non-zero in data.

Kategorien

Mehr zu Matrices and Arrays finden Sie in Hilfe-Center und File Exchange

Tags

Gefragt:

am 14 Dez. 2017

Bearbeitet:

KL
am 14 Dez. 2017

Community Treasure Hunt

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

Start Hunting!

Translated by