Scaling the natrix in specific range
1 次查看(过去 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
0 个评论
回答(2 个)
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
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
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
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;
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!