MATLAB Answers


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


Log in to comment.

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)

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

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

Log in to comment.

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);


I think there must be a ~ before isnan.

Hi Jan, thank you. Corrected.

Log in to comment.

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today