我有一个这样的数组:
array([[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11],
[12, 13],
[14, 15]])
我想让这个数组在 -1 和 1 之间标准化。我目前正在使用 numpy 作为库。
我有一个这样的数组:
array([[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11],
[12, 13],
[14, 15]])
我想让这个数组在 -1 和 1 之间标准化。我目前正在使用 numpy 作为库。
nazz 的答案并非在所有情况下都有效,并且不是进行您尝试执行的缩放的标准方式(有无数种可能的方式可以缩放到 [-1,1] )。我假设您想分别缩放每一列:
1)你应该除以绝对最大值:
arr = arr - arr.mean(axis=0)
arr = arr / np.abs(arr).max(axis=0)
2) 但是如果一列的最大值为 0(当该列全为零时会发生这种情况),您将收到错误消息(您不能除以 0)。
arr = arr - arr.mean(axis=0)
safe_max = np.abs(arr).max(axis=0)
safe_max[safe_max==0] = 1
arr = arr / safe_max
不过,这不是执行此操作的标准方法。您正在尝试做一些“特征缩放”,请参见此处
那么公式是:
import numpy as np
def scale(X, x_min, x_max):
nom = (X-X.min(axis=0))*(x_max-x_min)
denom = X.max(axis=0) - X.min(axis=0)
denom[denom==0] = 1
return x_min + nom/denom
X = np.array([
[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11],
[12, 13],
[14, 15]
])
X_scaled = scale(X, -1, 1)
print(X_scaled)
结果:
[[-1. -1. ]
[-0.71428571 -0.71428571]
[-0.42857143 -0.42857143]
[-0.14285714 -0.14285714]
[ 0.14285714 0.14285714]
[ 0.42857143 0.42857143]
[ 0.71428571 0.71428571]
[ 1. 1. ]]
如果要缩放整个矩阵(不是按列),请删除并axis=0
更改. denom[denom==0] = 1
denom = denom + (denom is 0)
假设你有一个数组arr
。您可以像这样对其进行标准化:
arr = arr - arr.mean()
arr = arr / arr.max()
您首先减去平均值以使其居中 ,然后除以最大值以将其缩放到 .