Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

An easy Array question

Asked by Hello kity on 12 Dec 2012

I have a set of data seprated by Nans, example; DATA= [1; 2; 3; 4; NaN ; 6 ;7 ; NaN]

I want to do a calculation in every set of rows (example 1- 4 and 6-7).

So I programmed and found all the begin and end indices of each row (in this example, begin [ 1 ; 4] and end [6 ; 7]).

so this is what i want: Have two columns with begin and end indices;

column 1;  A=[1 ; 6 ] %%%these are the begin indices
column 2;  B[ 4 ;7 ] %% these are the end indices

now i want created a new array (call it new array) that has counted 1-4 and 6-7.

Then all i need to do is out=data(newarray) and i ll have my rows which i use for calc

0 Comments

Hello kity

Products

No products are associated with this question.

2 Answers

Answer by Sean de Wolski on 12 Dec 2012

Are you sure you need a cell array?

I would just use a for-loop and loop over the start and end indices:

sidx = start index
eidx = end index
for ii = 1:numel(eidx)
 do_something_with(X(sidx(ii):eidx(ii)));
end

Of course this is also how I would build the cell array (i.e. replace

do_something_with with C(idx) = {}

And preallocate C with

C = cell(numel(sidx,1));

1 Comment

Hello kity on 12 Dec 2012

i changed my question a bit, maybe it is more clear now.

Sean de Wolski
Answer by Andrei Bobrov on 13 Dec 2012
Edited by Andrei Bobrov on 13 Dec 2012
DATA= [1; 2; 3; 4; NaN ; 6 ;7 ; NaN];
a = [1;4];
b = [6;7];
d = DATA(~isnan(DATA));
out = mat2cell(d(:),[diff(a)+1,diff(b)+1],1);

2 Comments

Jan Simon on 13 Dec 2012

I think there must be a ~ before isnan.

Andrei Bobrov on 13 Dec 2012

Hi Jan, thank you. Corrected.

Andrei Bobrov

Contact us