Scaling the natrix in specific range

조회 수: 2 (최근 30일)
kash
kash 2012년 12월 1일
편집: Walter Roberson 2017년 4월 18일
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에서 Programming에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by