稀疏矩阵内部元素的放缩
假如我们定义了一个稀疏矩阵,如下所示:
import scipy as spy
import numpy as np
N=4
row=[1, 1, 1, 2, 2, 3, 3, 3, 0, 0]
col=[2, 3, 3, 1, 3, 2, 3, 0, 3, 1]
value=[11, 12, 13, 14, 15, 16,17, 18, 19, 10]
A=spy.sparse.csc_matrix((value,(row,col)),shape=(N, N))
print(A.todense())
[[ 0 10 0 19]
[ 0 0 11 25]
[ 0 14 0 15]
[18 0 16 17]]
操作1:对1行2列元素除以12
A[0,1]=A[0,1]/12
print(A.todense())
执行结果:
[[ 0 0 0 19]
[ 0 0 11 25]
[ 0 14 0 15]
[18 0 16 17]]
操作2:将该矩阵的每列除以它的列和
for i in range(0, np.size(A, 0)):
col_sum=np.sum(A[:,i])
A[:,i]=A[:,i]/col_sum
print(A.todense())
执行结果:
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]
[1 0 0 0]]
这都不是我们想要看到的结果!因为矩阵A的元素类型不对,需要改成float型!正确代码如下:
实现操作1:
import scipy as spy
import numpy as np
N=4
row=[1, 1, 1, 2, 2, 3, 3, 3, 0, 0]
col=[2, 3, 3, 1, 3, 2, 3, 0, 3, 1]
value=[11, 12, 13, 14, 15, 16,17, 18, 19, 10]
A=spy.sparse.csc_matrix((value,(row,col)),shape=(N, N), dtype=np.dtype(float))
A[0,1]=A[0,1]/12
print(A.todense())
期望结果:
[[ 0. 0.83333333 0. 19. ]
[ 0. 0. 11. 25. ]
[ 0. 14. 0. 15. ]
[ 18. 0. 16. 17. ]]
实现操作2:
import scipy as spy
import numpy as np
N=4
row=[1, 1, 1, 2, 2, 3, 3, 3, 0, 0]
col=[2, 3, 3, 1, 3, 2, 3, 0, 3, 1]
value=[11, 12, 13, 14, 15, 16,17, 18, 19, 10]
A=spy.sparse.csc_matrix((value,(row,col)),shape=(N, N), dtype=np.dtype(float))
for i in range(0, np.size(A, 0)):
col_sum=np.sum(A[:,i])
A[:,i]=A[:,i]/col_sum
print(A.todense())
期望结果:
[[ 0. 0.41666667 0. 0.25 ]
[ 0. 0. 0.40740741 0.32894737]
[ 0. 0.58333333 0. 0.19736842]
[ 1. 0. 0.59259259 0.22368421]]