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

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

grouping structures together based on filter

Asked by hdg D 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

Tags

Products

No products are associated with this question.

2 Answers

Answer by Walter Roberson on 21 Aug 2013
Edited by Walter Roberson 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 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 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 on 21 Aug 2013

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

Walter Roberson
Answer by Azzi Abdelmalek on 21 Aug 2013
Edited by Azzi Abdelmalek 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

Contact us