Increase nonzero values without deleting zeros
조회 수: 8(최근 30일)
표시 이전 댓글
I have a vector X.
X=[0 0 0 0 1 1 1 1 0 0 0 0 0 0 2 2 2 2 2 2 0 0 0 3 3 3 3 0 0 0 0 0 4 4 4]
I want to increase the values of the nonzero elements in vector X by 10 However, when I do this using the find function I end up just having a vector without the zeros.
Y=X((find(X~=0)))+10;
Y=[11 11 11 11 22 22 ... ]
Is there a way to do this without using a for loop?
채택된 답변
David J. Mack
2017년 4월 12일
편집: David J. Mack
2017년 4월 12일
Hey monmatlab, simply use logical indexing:
Y = X;
isNonzero = X~=0;
Y(isNonzero) = 10*Y(isNonzero);
or the more compact inplace replacement:
X(X~=0) = 10*X(X~=0);
Greetings, David
댓글 수: 2
David J. Mack
2017년 4월 12일
Ah true, the OP stated to increase it... but it's the same idea anyway. Just replace the * by a +.
추가 답변(1개)
참고 항목
범주
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!