Filter löschen
Filter löschen

Replacing elements in matrix with relational operations

1 Ansicht (letzte 30 Tage)
Feynman
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)

Akzeptierte Antwort

David Sanchez
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
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
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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Walter Roberson
Walter Roberson am 7 Okt. 2013
The task cannot be accomplished without using at least one implicit function other than the relational operators.

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!

Translated by