# Fastest way to replace values in an array if they equal a certain value?

21 views (last 30 days)

Show older comments

Eric Chadwick
on 26 May 2019

Commented: Eric Chadwick
on 28 May 2019

Hello,

I have a very large array (4 billion x 2). I frequently need to update the values in column two based on a value from another list. This is how I currently have it:

for i = 1:size(net,1)

imcoords(imcoords(:,2)==net{i,7},2) = i;

end

Where net is a cell array and imcoords is the Nx2 array. Just as it is written, I need to replace all values of the second column of imcoords that equal the value in the 7th column of the cell array with the index of the current row of the cell array we are in. With the method I have right now this takes way too long and is the current bottleneck of my code since I need to do this frequently.

Does anyone have any ideas to make this quicker?

Thanks you!

Eric

##### 2 Comments

John D'Errico
on 26 May 2019

### Accepted Answer

John D'Errico
on 26 May 2019

##### 3 Comments

Walter Roberson
on 26 May 2019

Your net{i,7} appear to be scalar . If so then

net7 = [net{:,7}];

look7(net7) = 1:length(net7);

imcoords(:,2) = look7(imcoords(:,2));

This depends upon:

- that the net{:,7} are scalars
- that there are no duplicate values (if there are then the replacement is order dependent)
- that the existing values are all positive integers
- that all of the existing values are being replaced
- that the existing values all exceed the number of rows in net (otherwise you could get multiple replacements with your code

If not all of the existing values are being replaced, then you can initialize

look7 = 1 : maximum_expected_value

look7(net7) = 1:length(net7);

### More Answers (0)

### See Also

### Categories

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!