How to replace negative elements in a Matrix with zeros?
이전 댓글 표시
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?
채택된 답변
추가 답변 (2개)
Jan
2018년 1월 17일
Or:
A(A < 0) = 0
댓글 수: 3
Jerzy Pela
2020년 2월 27일
편집: Jerzy Pela
2020년 2월 27일
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
2024년 5월 4일
thank you for this extra little insight!
Johnny Zheng
2020년 10월 14일
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
Stephen23
2020년 10월 14일
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
2020년 10월 14일
You'd need to multiple element-wise,
A = A.*(A>0);
카테고리
도움말 센터 및 File Exchange에서 Variables에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
