Increase nonzero values without deleting zeros

6 ビュー (過去 30 日間)
monmatlab
monmatlab 2017 年 4 月 12 日
コメント済み: David J. Mack 2017 年 4 月 12 日
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?
  2 件のコメント
KSSV
KSSV 2017 年 4 月 12 日
Where you want to place the non zeros numbers?
monmatlab
monmatlab 2017 年 4 月 12 日
編集済み: monmatlab 2017 年 4 月 12 日
at their initial positions. I want to have the same vector , just with the nonzeros increased by ten

サインインしてコメントする。

採用された回答

David J. Mack
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 件のコメント
Adam
Adam 2017 年 4 月 12 日
If this is what you actually want to do, with multiplication then you can just skip the logical part and use
X = X * 10
since multiplying by 0 is 0 anyway! I was under the impression you wanted to add 10, not multiply by it though.
David J. Mack
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 件)

Adam
Adam 2017 年 4 月 12 日
X = ( X ~= 0 ) .* ( X + 10 );

カテゴリ

Help Center および File ExchangeData Type Conversion についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by