Python 使用scipy或sklearn缩放两个矩阵

Python 使用scipy或sklearn缩放两个矩阵,python,numpy,scipy,scikit-learn,Python,Numpy,Scipy,Scikit Learn,我想缩放一个矩阵X1(按列),然后使用缩放X1时发现的平均值和标准偏差缩放另一个矩阵X2 据我所知,sklearn在缩放矩阵时不返回均值/方差。在没有我实施的情况下,是否有其他方法 例如: X1 X2 将X2[i][j]替换为(X2[i][j]-平均值[X1[:,i]]]/std[X1[:,i] sklearn预处理的比例函数不能使用,因为它不返回均值和方差 使用.std()和.mean()方法接受axis参数来计算行/列统计数据,其余将由boardcasting处理: In [170]: X

我想缩放一个矩阵X1(按列),然后使用缩放X1时发现的平均值和标准偏差缩放另一个矩阵X2

据我所知,sklearn在缩放矩阵时不返回均值/方差。在没有我实施的情况下,是否有其他方法

例如:
X1

X2

X2[i][j]
替换为
(X2[i][j]-平均值[X1[:,i]]]/std[X1[:,i]

sklearn预处理的比例函数不能使用,因为它不返回均值和方差

使用
.std()
.mean()
方法接受
axis
参数来计算行/列统计数据,其余将由boardcasting处理:

In [170]:

X1
Out[170]:
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])
In [171]:

X2
Out[171]:
array([[12, 13, 14, 15],
       [16, 17, 18, 19]])
In [172]:

(X2-X1.mean(0))/X1.std(0)
Out[172]:
array([[ 2.14330352,  2.14330352,  2.14330352,  2.14330352],
       [ 3.3680484 ,  3.3680484 ,  3.3680484 ,  3.3680484 ]])
从scikit学习处理这一点,和角落的情况,相当好

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X1)
output = scaler.transform(X2)
如有必要,可以使用访问要素列的平均值和标准偏差

scaler.std_
scaler.mean_

您还可以使用管道中的StandardScaler作为估计器之前的预处理。

您能否举例说明按列缩放矩阵的意义,以及X2的外观?缩放意味着使用该列的平均值及其标准偏差对X1的每列进行规范化问题是您必须手动处理列的所有值均为零的情况。我试图找到一个函数,它不仅在列的所有值==0时自动执行,只要该列中的值都是相同的值,方差将为0,转换将导致
+inf
。不知道在这种情况下你想怎么做。
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X1)
output = scaler.transform(X2)
scaler.std_
scaler.mean_