数组的按列归一化(缩放)
column-wise normalization (scaling) of arrays
我想在 python 中规范化(放入范围 [0, 1]
)一个二维数组,但相对于特定列。
例如,给定:
a = array([[1 2 3],[4,5,6],[7,8,9]])
我需要像 "norm_column_wise(a,1)" 这样的东西,它采用矩阵 "a",并且只规范化第二列 [2,5,8],
结果应该是:
norm_column_wise(a,1) = array([[1,0,3],[4,0.5,6],[7,1.0,9]])
我写了一个简单的归一化代码:
def norm_column_wise(arr):
return (arr-arr.min(0))/(arr.max(0)-arr.min(0))
但它适用于数组的所有列。如何修改这个简单的代码以指定特定的列?
提前致谢!
我会为此使用 numpy。
import numpy as np
def normalize_column(A, col):
A[:,col] = (A[:,col] - np.min(A[:,col])) / (np.max(A[:,col]) - np.min(A[:,col]))
if __name__ == '__main__':
A = np.matrix([[1,2,3], [4,5,6], [7,8,9]], dtype=float)
normalize_column(A, 1)
print (A)
结果
[[ 1. 0. 3. ]
[ 4. 0.5 6. ]
[ 7. 1. 9. ]]
根据上面的注释,max-min 可以替换为:
np.ptp(A,0)[0,col]
我想在 python 中规范化(放入范围 [0, 1]
)一个二维数组,但相对于特定列。
例如,给定:
a = array([[1 2 3],[4,5,6],[7,8,9]])
我需要像 "norm_column_wise(a,1)" 这样的东西,它采用矩阵 "a",并且只规范化第二列 [2,5,8],
结果应该是:
norm_column_wise(a,1) = array([[1,0,3],[4,0.5,6],[7,1.0,9]])
我写了一个简单的归一化代码:
def norm_column_wise(arr):
return (arr-arr.min(0))/(arr.max(0)-arr.min(0))
但它适用于数组的所有列。如何修改这个简单的代码以指定特定的列?
提前致谢!
我会为此使用 numpy。
import numpy as np
def normalize_column(A, col):
A[:,col] = (A[:,col] - np.min(A[:,col])) / (np.max(A[:,col]) - np.min(A[:,col]))
if __name__ == '__main__':
A = np.matrix([[1,2,3], [4,5,6], [7,8,9]], dtype=float)
normalize_column(A, 1)
print (A)
结果
[[ 1. 0. 3. ]
[ 4. 0.5 6. ]
[ 7. 1. 9. ]]
根据上面的注释,max-min 可以替换为:
np.ptp(A,0)[0,col]