How to add a specific number to elements in a vector?
7 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Ivonne Escorcia
am 29 Jan. 2018
Kommentiert: Guillaume
am 5 Feb. 2018
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 Kommentare
Giacomo Maurelli
am 29 Jan. 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))
Akzeptierte Antwort
Guillaume
am 29 Jan. 2018
Bearbeitet: Guillaume
am 29 Jan. 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 Kommentare
Guillaume
am 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.
Weitere Antworten (1)
Giacomo Maurelli
am 29 Jan. 2018
Bearbeitet: Walter Roberson
am 29 Jan. 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))
0 Kommentare
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!