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

稀疏矩阵内部元素的放缩

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

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]]
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值