我有一个scipy.sparse.coo_matrix
矩阵,我想把它转换成每列的位集,以便进一步计算。(在本例中,我在100Kx1M上进行测试)。在
我现在正在做这样的事情:
bitsets = [ intbitset() for _ in range(matrix.shape[1]) ]
for i,j in itertools.izip(matrix.row, matrix.col):
bitsets[j].add(i)
这是可行的,但是COO matrix按行迭代值。理想情况下,我希望按列迭代,然后立即构建位集,而不是每次都添加不同的位集。在
找不到迭代基于矩阵列的方法。有?在
我不介意转换成其他稀疏格式,但无法找到有效迭代矩阵的方法。(在CSC矩阵上使用nonzero()
已经被证明是非常不有效的…)
谢谢!在
制作一个小的稀疏矩阵:
{{cd2>以及
^{pr2}$
}实现这些。在
转换为
csr
对行(但不一定是列)排序。nonzero
转换回coo
,并以新的顺序返回行和列。在我想说的是转换为
csc
对列排序,但看起来不是这样:csr的转置产生csc:
我不完全理解您要做什么,或者为什么要进行列排序,但是
lil
格式可能会有帮助:一般来说,稀疏矩阵的迭代速度很慢。
csr
和csc
格式的矩阵乘法是最快的运算。许多其他操作都间接地利用了这一点(例如row sum)。另一个相对快速的操作集是那些可以直接使用data
属性的操作,而不必注意行或列的值。在coo
不实现索引或迭代。csr
和{相关问题 更多 >
编程相关推荐