我有一个非常大的Scipy稀疏矩阵(CSR_MATRIX).我只想知道如何计算每一行的值之和以及矩阵每列的值之和.
我有一个代码执行相同的操作,但它使用CSC_MATRIX.关于行和列的求和,这两者之间有什么不同吗?
我想也许我可以得到其他人也可以使用的快速回复,否则我可以自己测试一下.
from scipy.sparse import *
from scipy import *
row = array([0,0,1,2,2,2])
col = array([0,2,2,0,1,2])
data = array([1,2,3,4,5,6])
csr_matrix( (data,(row,col)), shape=(3,3) ).todense()
rowsums = []
colsums = []
#compute rowsums and colsums
Run Code Online (Sandbox Code Playgroud)
所以rowsums应该[3, 3, 15]而且colsum应该是[5, 5, 11].
我知道我可以使用matrix.getrow(i)和matrix.getcol(i)来获取每一行和列,并使用sum()函数来获得总和,但我关注的是性能.我需要一个更有效的解决方案.
我正在使用 Scipy 稀疏矩阵csr_matrix作为词上下文向量中的上下文向量。Mycsr_matrix是一个(1, 300)形状,所以它是一个一维向量。
我需要在稀疏向量上使用置换(圆形右移或圆形左移)(用于显示左上下文和右上下文)。
示例:我有[1, 2, 3, 4]并且我想创建如下左右排列:
右排列:[4, 1, 2, 3]
左排列: [2, 3, 4, 1]
在 csr 矩阵中,我无法访问列索引,因此我不能只更改列索引。
是否有针对行排列的高效高性能解决方案,csr_matrix或者我遗漏了什么?
可运行代码:
from scipy.sparse import csr_matrix
rows = [0, 0, 0]
columns = [100, 47, 150]
data = [-1, +1, -1]
contextMatrix = csr_matrix( (data,(rows, columns)), shape=(1, 300) )
Run Code Online (Sandbox Code Playgroud)
这意味着我有一个 300 列的向量,其第 0 行的第 100、47、150 列都是非零值,它们的值分别在数据列表中。
现在我想要的是一个置换,这意味着我希望将列数组更改为 [101, 48, 151] 进行右置换,将 [99, 46, 149] 更改为左置换。
应该注意的是,排列是循环的,这意味着如果第 299 列有非零数据,使用正确的排列数据将被移动到第 …