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

New to MATLAB?

grouping structures together based on filter

Asked by hdg D

hdg D (view profile)

on 21 Aug 2013

Hi I have a structure that looks like the below

a
=
mydata:[135x6]
myid:{1x6}
mydates = [135x1]

I would like to separate out data into positive and negative I would go through each column in mydata and filter for positive and negative and match it to the corresponding dates

so that in the end i have 6 structures

so for example

apos(1)
=
mydata:[120x1]
mydates:[120x1]
myid ={1}

is there a clean way to do this rather than using a for loop?

Thanks, HD

0 Comments

hdg D

hdg D (view profile)

Tags

Products

No products are associated with this question.

2 Answers

Answer by Walter Roberson

Walter Roberson (view profile)

on 21 Aug 2013
Edited by Walter Roberson

Walter Roberson (view profile)

on 21 Aug 2013
Accepted answer
aneg = cell2mat( arrayfun( @(K) struct( 'mydata', a.mydata(a.mydata(:,K) < 0,K), 'mydates', a.mydates(a.mydata(:,K) < 0), 'myid', a.myid(K)), 1:size(a.mydata,2),'Uniform', 0) );
apos = cell2mat( arrayfun( @(K) struct( 'mydata', a.mydata(a.mydata(:,K) > 0,K), 'mydates', a.mydates(a.mydata(:,K) > 0), 'myid', a.myid(K)), 1:size(a.mydata,2),'Uniform', 0) );

Question: what if the data is exactly 0?

3 Comments

hdg D

hdg D (view profile)

on 21 Aug 2013

Thanks for your help but is this syntax correct the 1:size(a.mydata(2),'Uniform', 0)

The 0 will be clubbed in with thepositive

Walter Roberson

Walter Roberson (view profile)

on 21 Aug 2013

Sorry, I fixed my typo.

If you want 0 to be included with positive, then use >= 0 instead of > 0 for apos

hdg D

hdg D (view profile)

on 21 Aug 2013

Sorry i figured it out thanks so much for your help!

Walter Roberson

Walter Roberson (view profile)

Answer by Azzi Abdelmalek

Azzi Abdelmalek (view profile)

on 21 Aug 2013
Edited by Azzi Abdelmalek

Azzi Abdelmalek (view profile)

on 21 Aug 2013
%Example
a.mydata=randi([-10 10],135,6)
a.myid=randi([-10 10],1,6)
a.mydates =randi([-10 10],135,1)
%--------------------------------
c1=a.mydata(:);
c2=a.myid(:);
c3=a.mydates(:);
apos.mydata=c1(c1>=0)
apos.myid=c2(c2>=0)
apos.mydates=c3(c3>=0)

0 Comments

Azzi Abdelmalek

Azzi Abdelmalek (view profile)

Contact us