-4

可能重复:
MATLAB:如何将向量归一化/反归一化到范围 [-1;1]

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

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

4

3 回答 3

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的值介于-1和之间1

例子:

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
于 2011-04-12T21:20:33.127 回答
1

一个简单的解决方案将使用简单的逻辑。假设您要独立缩放每个列,请执行以下操作:

  1. 减去每列的列最小值。
  2. 将列最大值缩放为 2。
  3. 减去 1。

显然,这将导致每列的最小值为 -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
于 2011-04-12T22:40:20.127 回答
0
[m, n] = size(normalizedMatrix)
normalizedMatrix*2-ones(m,n)
于 2011-04-12T20:32:31.880 回答