标准化 python 中的 numpy 数组列
Normalize numpy array columns in python
我有一个 numpy 数组,其中特定行的每个单元格代表一个特征值。我将它们全部存储在一个 100*4 矩阵中。
A B C
1000 10 0.5
765 5 0.35
800 7 0.09
知道如何标准化每个值都在 0 和 1 之间的 numpy.array 行吗?
我想要的输出是:
A B C
1 1 1
0.765 0.5 0.7
0.8 0.7 0.18(which is 0.09/0.5)
提前致谢:)
如果我没理解错的话,你要做的是除以每列中的最大值。您可以使用 broadcasting.
轻松完成此操作
从您的示例数组开始:
import numpy as np
x = np.array([[1000, 10, 0.5],
[ 765, 5, 0.35],
[ 800, 7, 0.09]])
x_normed = x / x.max(axis=0)
print(x_normed)
# [[ 1. 1. 1. ]
# [ 0.765 0.5 0.7 ]
# [ 0.8 0.7 0.18 ]]
x.max(0)
取第 0 维(即行)的最大值。这将为您提供一个大小为 (ncols,)
的向量,其中包含每列中的最大值。然后,您可以将 x
除以该向量以规范化您的值,以便每列中的最大值将缩放为 1。
如果 x
包含负值,您需要先减去最小值:
x_normed = (x - x.min(0)) / x.ptp(0)
此处,x.ptp(0)
returns "peak-to-peak"(即范围,最大值 - 最小值)沿轴 0。此归一化还保证每列中的最小值将为 0 .
您可以使用 sklearn.preprocessing:
from sklearn.preprocessing import normalize
data = np.array([
[1000, 10, 0.5],
[765, 5, 0.35],
[800, 7, 0.09], ])
data = normalize(data, axis=0, norm='max')
print(data)
>>[[ 1. 1. 1. ]
[ 0.765 0.5 0.7 ]
[ 0.8 0.7 0.18 ]]
我有一个 numpy 数组,其中特定行的每个单元格代表一个特征值。我将它们全部存储在一个 100*4 矩阵中。
A B C
1000 10 0.5
765 5 0.35
800 7 0.09
知道如何标准化每个值都在 0 和 1 之间的 numpy.array 行吗?
我想要的输出是:
A B C
1 1 1
0.765 0.5 0.7
0.8 0.7 0.18(which is 0.09/0.5)
提前致谢:)
如果我没理解错的话,你要做的是除以每列中的最大值。您可以使用 broadcasting.
轻松完成此操作从您的示例数组开始:
import numpy as np
x = np.array([[1000, 10, 0.5],
[ 765, 5, 0.35],
[ 800, 7, 0.09]])
x_normed = x / x.max(axis=0)
print(x_normed)
# [[ 1. 1. 1. ]
# [ 0.765 0.5 0.7 ]
# [ 0.8 0.7 0.18 ]]
x.max(0)
取第 0 维(即行)的最大值。这将为您提供一个大小为 (ncols,)
的向量,其中包含每列中的最大值。然后,您可以将 x
除以该向量以规范化您的值,以便每列中的最大值将缩放为 1。
如果 x
包含负值,您需要先减去最小值:
x_normed = (x - x.min(0)) / x.ptp(0)
此处,x.ptp(0)
returns "peak-to-peak"(即范围,最大值 - 最小值)沿轴 0。此归一化还保证每列中的最小值将为 0 .
您可以使用 sklearn.preprocessing:
from sklearn.preprocessing import normalize
data = np.array([
[1000, 10, 0.5],
[765, 5, 0.35],
[800, 7, 0.09], ])
data = normalize(data, axis=0, norm='max')
print(data)
>>[[ 1. 1. 1. ]
[ 0.765 0.5 0.7 ]
[ 0.8 0.7 0.18 ]]