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?

How do i replace this code to fast up?

Asked by subha

subha (view profile)

on 25 Aug 2014
Latest activity Answered by Iain

Iain (view profile)

on 29 Aug 2014
Accepted Answer by Iain

Iain (view profile)

Variable poshidstates have 4 possible values(0,1,2,3). Everytime, poshidstates has to select 1 value out of this four.In this below code, i=100,j=500. Because of below mentioned code part , my program run more than 8 hour instead of just 1 hour(I have to call this code for 600 batches and each batch for 50 times). how can i replace this?

   val_vect=[0 1 2 3];
  for i=1:numcases;
      for j=1:numhid;
          prob=[poshidprobs0(i,j),poshidprobs1(i,j),poshidprobs2(i,j),poshidprobs3(i,j)];
          K=find(mnrnd(1,prob)==1);
          poshidstate(i,j)=val_vect(K);
      end
  end

16 Comments

subha

subha (view profile)

on 28 Aug 2014

@Geoff. I removed whole lines whatever i posted here. Instead that i used, poshidstate = poshidprobs1+ poshidprobs2+poshidprobs3 . During that time, it took around 40 min only. It was working fine. But it is an approximation.I want to use the one,posted here. numbatches=600.

yes this is part of my program. As my code is around 100 lines long, i couldnot post everything over here. But in short, my program looks likes this.

for epoch=1:50;
   for batch= 1:numbatches;
       data = batchdata(:,:,batch)
          % calculations related to poshidprobs 0, 1, 2, 3 goes  here
           % then the posted part comes here
   end
end
Iain

Iain (view profile)

on 28 Aug 2014

Ok, now I see why it takes so long. You're repeating that calculation 30,000 times.

But seeing what you're doing, this might be faster:

 temp = rand(100, 500);
 poshidstate = (temp > poshidprobs0) + (temp > (poshidprobs0 + poshidprobs1)) + (temp > (poshidprobs0 + poshidprobs1 + poshidprobs2));
subha

subha (view profile)

on 28 Aug 2014

Hi lain, Thanks a lot..I am so happy. You saved lots and lots of time .Problem resolved. I am searching for this for long. Now its just take 40 minutes. Thank u so much.No words to express.So happy. Please post this as answer. So many will be looking for this. Thanks mathworks

subha

subha (view profile)

Tags

Products

No products are associated with this question.

1 Answer

Answer by Iain

Iain (view profile)

on 29 Aug 2014
Accepted answer

Ok, now I see why it takes so long. You're repeating that calculation 30,000 times.

But seeing what you're doing, this might be faster:

 temp = rand(100, 500);
 poshidstate = (temp > poshidprobs0) + (temp > (poshidprobs0 + poshidprobs1)) + (temp > (poshidprobs0 + poshidprobs1 + poshidprobs2));

0 Comments

Iain

Iain (view profile)

Contact us