首页 > 编程 > Python > 正文

python常见需注意操作——稀疏矩阵内元素的放缩

2019-11-08 01:43:03
字体:
来源:转载
供稿:网友

稀疏矩阵内部元素的放缩

假如我们定义了一个稀疏矩阵,如下所示:

import scipy as spyimport numpy as npN=4row=[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]/12print(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_sumprint(A.todense())

执行结果:

[[0 0 0 0] [0 0 0 0] [0 0 0 0] [1 0 0 0]]

这都不是我们想要看到的结果!因为矩阵A的元素类型不对,需要改成float型!正确代码如下: 实现操作1:

import scipy as spyimport numpy as npN=4row=[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]/12print(A.todense())

期望结果:

[[ 0. 0.83333333 0. 19. ] [ 0. 0. 11. 25. ] [ 0. 14. 0. 15. ] [ 18. 0. 16. 17. ]]

实现操作2:

import scipy as spyimport numpy as npN=4row=[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_sumprint(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]]
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表