MATLAB Answers

## Reduce one for loop?

Asked by Farzaneh ziaee

### Farzaneh ziaee (view profile)

on 11 Feb 2016
Latest activity Commented on by Walter Roberson

### Walter Roberson (view profile)

on 12 Feb 2016
Accepted Answer by Walter Roberson

### Walter Roberson (view profile)

Hello, I have a bunch of code in which there are 2 for loops. I want to increase the speed and have just one for loop. here is the lines:
for i=1:length(bid)
for j=1:pidlastindex
if(bid(i)==pid(j))
C(i) = delay(j);
end
j=j+1;
end
i=i+1;
end
To do so I did :
for i=length (bid)
C(i)=delay(bid==pid(i))
end
But I get an error: In an assignment A(:)=:B, the number of elements in A and B must be the same.
Could any one tell me what is wrong here?
Also C in that loop changes the dimension on every loop iteration.
Thanks.

#### 0 Comments

Sign in to comment.

## 1 Answer

Answer by Walter Roberson

### Walter Roberson (view profile)

on 11 Feb 2016
Accepted Answer

What if there are multiple locations that match the bid? What if there are no locations that match the bid? What if one of the values is 23.45 and the other value is 23.45+(4e-15) and you can't tell the difference because they both show up as 23.45 on the screen?

Farzaneh ziaee

### Farzaneh ziaee (view profile)

on 11 Feb 2016
Ok good comment! Actually my bid vector is larger than pid and each value has some repetitions and pid is defined to get the unique values of bid. now I want to check if the row lets say number one in bid matches the first row of pid matlab gets the first row of the third vector which is delay and store it in a vector
Walter Roberson

### Walter Roberson (view profile)

on 12 Feb 2016
If pid is the unique values in bid then bid==pid(i) can be true in multiple locations in bid. That would select multiple delay, and you cannot store multiple values into the single destination C(i).
Perhaps you want something like
delay(find(bid==pid(i), 1, 'first'))

Sign in to comment.