Scaling the natrix in specific range
    10 views (last 30 days)
  
       Show older comments
    
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 Comments
Answers (2)
  Nasser M. Abbasi
      
 on 1 Dec 2012
        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 Comments
  Jan
      
      
 on 18 Apr 2017
				@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
 on 18 Apr 2017
				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
      
      
 on 1 Dec 2012
        
      Edited: Walter Roberson
      
      
 on 1 Dec 2012
  
      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 Comments
See Also
Categories
				Find more on Logical in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



