matlab将矩阵数据重新缩放为-1到1

时间:2011-04-12 20:25:51

标签: matlab matrix normalize

  

可能重复:
  MATLAB: how to normalize/denormalize a vector to range [-1;1]

嗨,刚开始使用Matlab,我想知道如何在矩阵中重新缩放数据。 我有一个N行×M列的矩阵,并希望将列中的数据重新缩放到介于-1和1之间。

每列包含从0到10,000的比例变化到0到1之间的值,我想要归一化到-1和1之间的原因,因为这些值将在神经网络中用作输入值对于基于正弦的转换函数。

3 个答案:

答案 0 :(得分:5)

之前的答案都不正确。这是你需要做的:

[rows,~]=size(A);%# A is your matrix
colMax=max(abs(A),[],1);%# take max absolute value to account for negative numbers
normalizedA=A./repmat(colMax,rows,1);

矩阵normalizedA的值介于-11之间。

示例:

A=randn(4)

A =

   -1.0689    0.3252   -0.1022   -0.8649
   -0.8095   -0.7549   -0.2414   -0.0301
   -2.9443    1.3703    0.3192   -0.1649
    1.4384   -1.7115    0.3129    0.6277

normalizedA = 

   -0.3630    0.1900   -0.3203   -1.0000
   -0.2749   -0.4411   -0.7564   -0.0347
   -1.0000    0.8006    1.0000   -0.1906
    0.4885   -1.0000    0.9801    0.7258

答案 1 :(得分:1)

一个简单的解决方案将使用简单的逻辑。假设您的意思是独立扩展EACH列,请执行以下操作:

  1. 减去每列的最小列数。
  2. 将列最大值缩放为2。
  3. 减1。
  4. 显然,这将导致每列的最小值为-1,最大值为1.执行此操作的代码非常简单。

    A = randn(5,4)   % some random example data
    A =
        0.70127      0.20378       0.4085      0.83125
        0.64984     -0.90414      0.67386       1.2022
         1.6843      -1.6584     -0.31735      -1.8981
        -1.3898     -0.89092     -0.23122      -1.2075
        0.72904    -0.095776      0.67517      0.28613
    

    现在,执行上述步骤A。

    A = bsxfun(@minus,A,min(A,[],1));
    A = bsxfun(@times,A,2./max(A,[],1));
    A = A - 1
    
    A =
        0.36043            1      0.46264      0.76071
        0.32697     -0.18989      0.99735            1
              1           -1           -1           -1
             -1      -0.1757     -0.82646     -0.55446
         0.3785      0.67828            1      0.40905
    

答案 2 :(得分:0)

[m, n] = size(normalizedMatrix)
normalizedMatrix*2-ones(m,n)