c语言稀疏矩阵做除法,稀疏矩阵的除法
小編典典
我M閑逛:
In [241]: M
Out[241]:
<6x3 sparse matrix of type ''
with 6 stored elements in Compressed Sparse Row format>
In [242]: M.A
Out[242]:
array([[1, 0, 0],
[0, 1, 0],
[0, 0, 1],
[0, 1, 0],
[0, 0, 1],
[1, 0, 0]], dtype=uint8)
In [243]: M.sum(1) # dense matrix
Out[243]:
matrix([[1],
[1],
[1],
[1],
[1],
[1]], dtype=uint32)
In [244]: M/M.sum(1) # dense matrix - full size of M
Out[244]:
matrix([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.],
[ 0., 1., 0.],
[ 0., 0., 1.],
[ 1., 0., 0.]])
這將解釋內(nèi)存錯(cuò)誤-如果內(nèi)存錯(cuò)誤M太大,則會(huì)M.A產(chǎn)生內(nèi)存錯(cuò)誤。
In [262]: S = sparse.csr_matrix(M.sum(1))
In [263]: S.shape
Out[263]: (6, 1)
In [264]: M.shape
Out[264]: (6, 3)
In [265]: M/S
....
ValueError: inconsistent shapes
我不完全確定這里發(fā)生了什么。
元素明智的乘法工作
In [266]: M.multiply(S)
Out[266]:
<6x3 sparse matrix of type ''
with 6 stored elements in Compressed Sparse Row format>
所以如果我構(gòu)造S為S = sparse.csr_matrix(1/M.sum(1))
如果某些行的總和為零,則存在除以零的問題。
如果我修改M為0行
In [283]: M.A
Out[283]:
array([[1, 0, 0],
[0, 1, 0],
[0, 0, 0],
[0, 1, 0],
[0, 0, 1],
[1, 0, 0]], dtype=uint8)
In [284]: S = sparse.csr_matrix(1/M.sum(1))
/usr/local/bin/ipython3:1: RuntimeWarning: divide by zero encountered in true_divide
#!/usr/bin/python3
In [285]: S.A
Out[285]:
array([[ 1.],
[ 1.],
[ inf],
[ 1.],
[ 1.],
[ 1.]])
In [286]: M.multiply(S)
Out[286]:
<6x3 sparse matrix of type ''
with 5 stored elements in Compressed Sparse Row format>
In [287]: _.A
Out[287]:
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.],
[ 1., 0., 0.]])
這不是最好M的證明,但是它建議一種有用的方法。行總和將是密集的,因此您可以使用通常的密集數(shù)組方法清除其逆。
2020-12-20
總結(jié)
以上是生活随笔為你收集整理的c语言稀疏矩阵做除法,稀疏矩阵的除法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 恶搞c语言程序设计,C语言编程学习:让人
- 下一篇: 河北师范大学C语言试题,2017年河北师