按平均值标准化Numpy矩阵行

时间:2015-10-19 18:27:57

标签: python numpy matrix

我想按平均值对矩阵行进行标准化,然后我为它编写了这段代码

m = np.matrix(
    [[1,2,3,4,5],
     [2,3,2,5,3],
     [5,5,5,3,2]])

for row in m[:,]:
    average = row.sum() / row.shape[1]
    row = row / average

在循环中,我将行除以平均值。但是这种划分不会改变矩阵m。如何以最简单,最智能的方式实现这种规范化?

2 个答案:

答案 0 :(得分:6)

计算行方式平均值和计算 's3_client_config' => [ 'key' => 'accessKey', 'secret' => 'secretKey', 'region' => 'us-east-1', 'version' => 'latest', ],

m/average

请注意,如果您的矩阵包含In [36]: average = m.mean(axis=1) In [37]: average Out[37]: matrix([[ 3.], [ 3.], [ 4.]]) In [38]: m/average Out[38]: matrix([[ 0.33333333, 0.66666667, 1. , 1.33333333, 1.66666667], [ 0.66666667, 1. , 0.66666667, 1.66666667, 1. ], [ 1.25 , 1.25 , 1.25 , 0.75 , 0.5 ]]) 个值,那么您可以使用NaN代替np.nanmean(m, axis=1)来计算行方式而忽略NaN。

答案 1 :(得分:1)

对于in-situ中的m更改,您可以转换为float数据类型(如果尚未转换),然后使用np.divide,就像这样 -

m = m.astype(float)
np.divide(m,m.mean(1),m)

示例运行 -

In [294]: m
Out[294]: 
matrix([[1, 2, 3, 4, 5],
        [2, 3, 2, 5, 3],
        [5, 5, 5, 3, 2]])

In [295]: m = m.astype(float)

In [296]: np.divide(m,m.mean(1),m);

In [297]: m
Out[297]: 
matrix([[ 0.33333333,  0.66666667,  1.        ,  1.33333333,  1.66666667],
        [ 0.66666667,  1.        ,  0.66666667,  1.66666667,  1.        ],
        [ 1.25      ,  1.25      ,  1.25      ,  0.75      ,  0.5       ]])