Scaling the natrix in specific range

2 次查看(过去 30 天)
I have a 300x1 matrix
where the minmum value is
-2.1188e+003
maximum is
460.3171
i want to scale in region from -1 to 1

回答(2 个)

Nasser M. Abbasi
Nasser M. Abbasi 2012-12-1
Since I just wrote the code, might as well post it. A quick function to scale it
function C = nma_rescale(A,new_min,new_max)
%Nasser M. Abbasi 011212
%NO ERROR CHECKING DONE ON INPUT. Rescale a matrix or a vector A
current_max = max(A(:));
current_min = min(A(:));
C =((A-current_min)*(new_max-new_min))/(current_max-current_min) + new_min;
end
to use:
EDU>> C=rand(3);
EDU>> B=nma_rescale(C,-1,1)
B =
-0.7625 0.8960 -0.2033
-0.3188 -0.8938 -1.0000
-0.8317 1.0000 -0.3316
  6 个评论
Jan
Jan 2017-4-18
@Dario: There is no convention. It depends on your problem, if the result of a scaled scalar is -1, 0, +1 or Inf, perhaps NaN.
Dario Dematties
Dario Dematties 2017-4-18
Thanks Jan, Does anyone know which is the reaction of libsvm software on matlab when it is fed with vectors with missing data (NaN)?

请先登录,再进行评论。


Walter Roberson
Walter Roberson 2012-12-1
编辑:Walter Roberson 2012-12-1
Does 0 need to remain 0, or should it become the midpoint of your [-2118.8 to 460.317] range?
0 remains 0:
matmin = min(mat);
matmax = max(mat);
newmat = mat;
newmat(mat < 0) = mat(mat < 0) ./ abs(minmat);
newmat(mat > 0) = mat(mat > 0) ./ maxmat;
Midpoint becomes 0:
matmin = min(mat);
matmax = max(mat);
newmat = 2 * (mat - matmin) ./ (matmax - matmin) - 1;

类别

Help CenterFile Exchange 中查找有关 Descriptive Statistics 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by