# Possible to modify only one portion of an array in one line?

2 views (last 30 days)
Eugenio Gil on 1 Nov 2019
Commented: Eugenio Gil on 1 Nov 2019
I have large arrays (10 to 100k elements) and would like to change some values that are too high, but only after certain point. What I have in mind is something like this:
x = [100 80 70 20 40 10 50 1 60] ;
xMax = 30 ;
transition = 3 ;
x(x>xMax & x(i)>transition) = xMax
I would like to know if there is a more efficient and elegant way of doing it instead of with a loop, like this:
x = [100 80 70 20 40 10 50 1 60] ;
xMax = 30 ;
transition = 3 ;
for i = 1 :length(x)
if i > transition & x(i) > xMax
x(i) = xMax ;
end
end
Is it possible to include two conditions in this manner?
Thanks

Fabio Freschi on 1 Nov 2019
x(x > xMax & 1:length(x) > transition) = xMax
Eugenio Gil on 1 Nov 2019
Thank you!

Guillaume on 1 Nov 2019
Edited: Guillaume on 1 Nov 2019
x(transition:end) = min(x(transition:end), xMax)
will be more efficient (than the now accepted answer) since it only test the condition values.
your loop is a bit siily. Since you know where the transition is you could just iterate from there:
for i = transition:numel(x)
if x(i) > xMax
x(i) = xMax
end
end
Why bother iterating over elements yoiu're never going to test.
Eugenio Gil on 1 Nov 2019
That was absolutely silly indeed! Thanks for pointing that out.

### Categories

Find more on Multidimensional Arrays in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by