Replacing elements in matrix with relational operations
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Feynman
am 7 Okt. 2013
Kommentiert: Walter Roberson
am 7 Okt. 2013
I am given a problem where I am given a matrix and I am suppose to change the values of the matrix depending on if a certain element of the matrix is greater than or less than a number. If it is greater than the variable n1 I am suppose to change the element to c1 and if is less than n1 I am suppose to change it to c2. I am to use only relational operations, I cannot use for, if, while or any implicit functions. How can I do this? This is what I have so far m3 is the matrix I am given
m4 = ((m3>n1)*c1)
m5 = ((m3<=n1)*c2)
0 Kommentare
Akzeptierte Antwort
David Sanchez
am 7 Okt. 2013
M=randi(10,3);
n1 = 5;
c1 = 4;
c2 = 3;
M1 = M<5;
D1 = c1*M1;
M2 = M>=5;
D2 = c2*M2;
new_M = D1 + D2;
% In a single line
new_M = c1*(M<5) + c2*(M>=5);
Adapt the values of n1, c1 and c4 to yours needs.
2 Kommentare
David Sanchez
am 7 Okt. 2013
I meant to use n1 instead of its value:
% In a single line
new_M = c1*(M<n1) + c2*(M>=n1);
Walter Roberson
am 7 Okt. 2013
Addition is an implicit function in MATLAB: the method @double/plus will be called in this situation. Multiplication is also a function; I think @double/mtimes would be called for your code suggestion. Note that .* would be better than * in your code
Your code suggestion does not leave unchanged the parts of M that do not satisfy the conditions.
Weitere Antworten (1)
Walter Roberson
am 7 Okt. 2013
The task cannot be accomplished without using at least one implicit function other than the relational operators.
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!