normalize all but the zeros in a vector?

5 Ansichten (letzte 30 Tage)
mark palmer
mark palmer am 24 Dez. 2023
Kommentiert: Walter Roberson am 24 Dez. 2023
I have a vector that contains 0s, something like this [44 0 23 19 0 0 30]
and I want to normalize the non-0 elements to 1-10, for instance, but the 0s keep messing it up.
Is there a way (hopefully without using loops) to normalize while not affecting the 0s? In other words, take the values from 19-44 and convert them to stretch over 1-10.

Akzeptierte Antwort

Dyuman Joshi
Dyuman Joshi am 24 Dez. 2023
Bearbeitet: Dyuman Joshi am 24 Dez. 2023
%Input
in = [44 0 23 19 0 0 30];
%Lazy preallocation, assuming all values are finite and not NaNs
out = 0*in;
%Indexing for non-zeros values
idx = in~=0;
%Output
out(idx) = rescale(in(idx), 1, 10)
out = 1×7
10.0000 0 2.4400 1.0000 0 0 4.9600
  6 Kommentare
Dyuman Joshi
Dyuman Joshi am 24 Dez. 2023
"But as soon as I say that, it will happen."
Haha, yes.
Mine used to be that too, but I am not sure how it changed into multiplying with 0. I think I'll go back to using zeros() soon, specially noting the difference in speed.
However, keeping performance in mind, maybe I should revisit this thread - https://in.mathworks.com/matlabcentral/answers/51411-initialize-a-mxn-matrix-with-the-same-number#answer_453549
Walter Roberson
Walter Roberson am 24 Dez. 2023
y = zeros(size(x), 'like', x);
for extra robustness.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Tags

Produkte


Version

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by