稀疏矩阵的除法

稀疏矩阵的除法,第1张

稀疏矩阵的除法

M
闲逛:

In [241]: MOut[241]: <6x3 sparse matrix of type '<class 'numpy.uint8'>'    with 6 stored elements in Compressed Sparse Row format>In [242]: M.AOut[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 matrixOut[243]: matrix([[1],        [1],        [1],        [1],        [1],        [1]], dtype=uint32)In [244]: M/M.sum(1)      # dense matrix - full size of MOut[244]: matrix([[ 1.,  0.,  0.],        [ 0.,  1.,  0.],        [ 0.,  0.,  1.],        [ 0.,  1.,  0.],        [ 0.,  0.,  1.],        [ 1.,  0.,  0.]])

这将解释内存错误-如果内存错误

M
太大,则会
M.A
产生内存错误。


In [262]: S = sparse.csr_matrix(M.sum(1))In [263]: S.shapeOut[263]: (6, 1)In [264]: M.shapeOut[264]: (6, 3)In [265]: M/S....ValueError: inconsistent shapes

我不完全确定这里发生了什么。

元素明智的乘法工作

In [266]: M.multiply(S)Out[266]: <6x3 sparse matrix of type '<class 'numpy.uint32'>'    with 6 stored elements in Compressed Sparse Row format>

所以如果我构造

S
S = sparse.csr_matrix(1/M.sum(1))

如果某些行的总和为零,则存在除以零的问题。


如果我修改

M
为0行

In [283]: M.AOut[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/python3In [285]: S.AOut[285]: array([[  1.],       [  1.],       [ inf],       [  1.],       [  1.],       [  1.]])In [286]: M.multiply(S)Out[286]: <6x3 sparse matrix of type '<class 'numpy.float64'>'    with 5 stored elements in Compressed Sparse Row format>In [287]: _.AOut[287]: array([[ 1.,  0.,  0.],       [ 0.,  1.,  0.],       [ 0.,  0.,  0.],       [ 0.,  1.,  0.],       [ 0.,  0.,  1.],       [ 1.,  0.,  0.]])

这不是最好

M
的证明,但是它建议一种有用的方法。行总和将是密集的,因此您可以使用通常的密集数组方法清除其逆。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5662762.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存