使用python从nxm数组(矩阵)中减去nx1数组(矩阵)

时间:2018-03-20 06:44:26

标签: python numpy matrix

我有以下代码:

X = np.array([[2,2,2,4,5,6],[1,2,3,3,3,4]])

mu = np.mean(X,axis=1)

我的问题:

当我尝试从数据(X-mu)中减去平均值时,出现以下错误: 操作数无法与形状一起广播(2,6)(2,) 这是有道理的,但仍然无法从这个数据中减去平均值X.我期待以下结果:

1.5 1.5 1.5 0.5 1.5 2.5
1.67 0.67 0.33 0.33 0.33 1.33 

非常感谢任何帮助,提前谢谢。

2 个答案:

答案 0 :(得分:1)

X = np.array([[2,2,2,4,5,6],[1,2,3,3,3,4]])
mu = np.mean(X,axis=1).reshape((2,1))
X-mu

但是,这并不会产生您期望的结果,但是:

[[-1.5,-1.5,-1.5,0.5,1.5,2.5],
[-1.66666667, -0.66666667,  0.33333333,  0.33333333,  0.33333333,1.33333333]]

在我看来这是正确的。

答案 1 :(得分:1)

In [162]: X = np.array([[2,2,2,4,5,6],[1,2,3,3,3,4]]) 

mu不是2x1,而是(2,),1d。

In [163]: mu = np.mean(X,axis=1)
In [164]: mu.shape
Out[164]: (2,)

要从(2,6)中减去它,你将它变成(2,1)数组。 mu[:,None]reshape一样。

另一种选择是向mean询问keepdims

In [165]: mu = np.mean(X,axis=1,keepdims=True)
In [166]: mu.shape
Out[166]: (2, 1)
In [167]: X-mu
Out[167]: 
array([[-1.5       , -1.5       , -1.5       ,  0.5       ,  1.5       ,
         2.5       ],
       [-1.66666667, -0.66666667,  0.33333333,  0.33333333,  0.33333333,
         1.33333333]])