normalize all but the zeros in a vector?
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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.
0 Kommentare
Akzeptierte Antwort
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)
6 Kommentare
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
am 24 Dez. 2023
y = zeros(size(x), 'like', x);
for extra robustness.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!