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

||                                                                                                                   这个问题已经在这里有了答案:                                                      
已邀请:
先前的答案均不正确。这是您需要做的:
[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
    
一个简单的解决方案将使用简单的逻辑。假设您要独立缩放EACH列,请执行以下操作: 减去每列的最小列数。 将列的最大比例缩放为2。 减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
    
[m, n] = size(normalizedMatrix)
normalizedMatrix*2-ones(m,n)
    

要回复问题请先登录注册