How to replace negative elements in a Matrix with zeros?
Ältere Kommentare anzeigen
A = [2, 3, -1, 5; -1, 4, -7, -3; -6, 0, 3, 9; 7, 6, -3, 8];
B = [9; 17; 15; -3];
AI = inv(A)
I = A*AI
X = AI*B
A*X
Now I am trying to set up a nested for loop to redefine negative elements in A. I need to replace negative elements in A with a zero. How do I go about doing this?
Akzeptierte Antwort
Weitere Antworten (2)
Jan
am 17 Jan. 2018
Or:
A(A < 0) = 0
3 Kommentare
Jerzy Pela
am 27 Feb. 2020
Bearbeitet: Jerzy Pela
am 27 Feb. 2020
I compared both methods, since it was one of the bottlenecks in my calculations and max(A,0) was significantly faster. Keep it in mind if you need to do that calculation numerous times in your script. Otherwise both methods are equal
Josh
am 4 Mai 2024
thank you for this extra little insight!
Johnny Zheng
am 14 Okt. 2020
A = A*(A>0);
This also works!
Have a summary of possible methods:
A = A*(A>0);
A = max(A,0);
A(A<0) = 0;
2 Kommentare
Stephen23
am 14 Okt. 2020
For non-scalar A (such as that shown in the question) the mtimes operator needs to be replaced with an element-wise times operator otherwise an error or incorrect output is quite likely:
A.*(A>0)
Also note that this method changes -Inf values to NaN, which may be an undesired side-effect:
>> A = [-1,0,1,;-Inf,Inf,NaN];
>> A = A.*(A>0)
A =
0 0 1
NaN Inf NaN
Adam Danz
am 14 Okt. 2020
You'd need to multiple element-wise,
A = A.*(A>0);
Kategorien
Mehr zu Variables finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
