嗨,刚开始使用 Matlab,我想知道如何重新调整矩阵中的数据。我有一个 N 行乘 M 列的矩阵,并希望将列中的数据重新缩放到 -1 和 1 之间。
每列包含的值范围从 0 - 10,000 到介于 0 和 1 之间的一些值,我想规范化到 -1 和 1 之间的原因,因为这些值将在神经网络中用作变换的输入值基于正弦的函数。
嗨,刚开始使用 Matlab,我想知道如何重新调整矩阵中的数据。我有一个 N 行乘 M 列的矩阵,并希望将列中的数据重新缩放到 -1 和 1 之间。
每列包含的值范围从 0 - 10,000 到介于 0 和 1 之间的一些值,我想规范化到 -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
一个简单的解决方案将使用简单的逻辑。假设您要独立缩放每个列,请执行以下操作:
显然,这将导致每列的最小值为 -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)