How to add a specific number to elements in a vector?

7 visualizzazioni (ultimi 30 giorni)
Hi,
I have a 1x600 matrix called 'samples' containing numbers from 0 to 255. I want to add the number 255 to every element in the array that is less than 100. I also want to divide the matrix into two different matrices, one contains the elements 0 to 300 and the other one from 301 to 600. I am able to divide the matrix in 2, but when I add the value 255 to every element less than 100 it adds it to all the elements in the matrix. How can I fix my error? Thanks! The code I have so far is
%samples is a 1x600 matrix
frames = 300;
on = wkeep(samples,frames,[frames+1 1]);
off = wkeep(samples,frames,[1 1]);
if any (on < 100)
on_count = on + 255;
end
if any (off < 100)
off_count = off +255 ;
end
  2 Commenti
Giacomo Maurelli
Giacomo Maurelli il 29 Gen 2018
%samples is a 1x600 matrix
% Loop over elements
for i=length(samples)
% Define if i-element of "samples" is greater of 100 or not
if samples(1,i)<100
% Adding 255 to elements that are less than 100
samples(1,i)=samples(1,i)+255;
end
end
% Definind matrix size
frames = 300;
% Creating the two matrices
matrix1 = samples(1,1:frames);
matrix2 = samples(1,frames+1:length(samples))
Ivonne Escorcia
Ivonne Escorcia il 5 Feb 2018
Hi, thanks for your answer. I was not able to get the right results with this code. The samples stay the same. But I was able to create the 2 matrices, thanks!

Accedi per commentare.

Risposta accettata

Guillaume
Guillaume il 29 Gen 2018
Modificato: Guillaume il 29 Gen 2018
if any (on < 100)
on_count = on + 255;
end
says: if any element of on is less than 100 (1st), then set on_count to the sum of on (hence all the elements of on) with 255. So, if any element of on is less than 100, you add 255 to all the element of on and put it in a new on_count variable. If none of the elements of on are less than 100, then nothing happens, on_count is not even created.
The correct way:
on_count = on; %copy everyting
mask = on_count < 100; %logical vector telling you which elements to change
on_count(mask) = on_count(mask) + 100; %only change those elements for which the mask is true
Same for off. No if or for needed.
edit: another way to obtain the same result with no comparison at all, just using mathematical operations would be:
on_count = mod(on - 100, 255) + 100;
  3 Commenti
Ivonne Escorcia
Ivonne Escorcia il 5 Feb 2018
Thank you for your answer and for explaining why the if statements do not work in this case. I was able to implement your first suggestion. Can I ask how the second suggestion works? "on_count = mod(on - 100, 255) + 100;"
Guillaume
Guillaume il 5 Feb 2018
"Can I ask how the second suggestion works?"
You're basically constraining your integers to the range 100-355 modulo 255. modulo operations are 0-based, so you need to offset your numbers down to 0 before the modulo operation and back to 100 after.

Accedi per commentare.

Più risposte (1)

Giacomo Maurelli
Giacomo Maurelli il 29 Gen 2018
Modificato: Walter Roberson il 29 Gen 2018
%samples is a 1x600 matrix
% Loop over elements
for i=length(samples)
% Define if i-element of "samples" is greater of 100 or not
if samples(1,i)<100
% Adding 255 to elements that are less than 100
samples(1,i)=samples(1,i)+255;
end
end
% Definind matrix size
frames = 300;
% Creating the two matrices
matrix1 = samples(1,1:frames);
matrix2 = samples(1,frames+1:length(samples))

Community Treasure Hunt

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

Start Hunting!

Translated by