我想按平均值对矩阵行进行标准化,然后我为它编写了这段代码
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。如何以最简单,最智能的方式实现这种规范化?
答案 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 ]])