矩阵的每一列应总和为1.在MATLAB中我会写一个矩阵mat
> mat = rand(5)
mat =
0.2017 0.3976 0.0318 0.2750 0.2225
0.0242 0.1222 0.1369 0.2883 0.3395
0.0390 0.4260 0.2395 0.1462 0.2816
0.0351 0.1851 0.2292 0.2386 0.3376
0.1624 0.0157 0.2125 0.2813 0.2388
> mat = mat ./ ( ones(5,1) * sum(mat) )
mat =
0.4363 0.3467 0.0374 0.2237 0.1567
0.0522 0.1066 0.1610 0.2345 0.2391
0.0844 0.3715 0.2819 0.1189 0.1983
0.0760 0.1614 0.2697 0.1941 0.2377
0.3511 0.0137 0.2500 0.2288 0.1682
这样
> sum(mat)
ans =
1.0000 1.0000 1.0000 1.0000 1.0000
我希望这是本网站的合适问题。感谢。
答案 0 :(得分:2)
这个操作可以在numpy中非常简洁地编写:
import numpy as np
mat = np.random.rand(5, 5)
mat /= mat.sum(0)
mat.sum(0) # will be array([ 1., 1., 1., 1., 1.])
答案 1 :(得分:1)
在NumPy中,您可以通过执行几乎完全相同的操作来完成此操作:
>>> import numpy as np
>>> mat = np.random.rand(5, 5)
>>> new_mat = mat / (np.ones((5, 1)) * sum(mat))
>>> new_mat.sum(axis=0)
array([ 1., 1., 1., 1., 1.])