Python Scipy 如何从 csr_matrix 遍历 upper/lower 三角形非零部分
Python Scipy How to traverse upper/lower trianglar portion non-zeros from csr_matrix
我有一个非常稀疏的矩阵(相似矩阵),尺寸为 300k * 300k。为了找出用户之间相对较大的相似性,我只需要upper/lower矩阵的三角形部分。那么,如何高效获取值大于阈值的用户坐标呢?
谢谢。
怎么样
sparse.triu(M)
如果M
是
In [819]: M.A
Out[819]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]], dtype=int32)
In [820]: sparse.triu(M).A
Out[820]:
array([[0, 1, 2],
[0, 4, 5],
[0, 0, 8]], dtype=int32)
您可能需要构造一个新的稀疏矩阵,其中只有高于阈值的非零值。
In [826]: sparse.triu(M>2).A
Out[826]:
array([[False, False, False],
[False, True, True],
[False, False, True]], dtype=bool)
In [827]: sparse.triu(M>2).nonzero()
Out[827]: (array([1, 1, 2], dtype=int32), array([1, 2, 2], dtype=int32))
这是 triu
的代码:
def triu(A, k=0, format=None):
A = coo_matrix(A, copy=False)
mask = A.row + k <= A.col
row = A.row[mask]
col = A.col[mask]
data = A.data[mask]
return coo_matrix((data,(row,col)), shape=A.shape).asformat(format)
我有一个非常稀疏的矩阵(相似矩阵),尺寸为 300k * 300k。为了找出用户之间相对较大的相似性,我只需要upper/lower矩阵的三角形部分。那么,如何高效获取值大于阈值的用户坐标呢? 谢谢。
怎么样
sparse.triu(M)
如果M
是
In [819]: M.A
Out[819]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]], dtype=int32)
In [820]: sparse.triu(M).A
Out[820]:
array([[0, 1, 2],
[0, 4, 5],
[0, 0, 8]], dtype=int32)
您可能需要构造一个新的稀疏矩阵,其中只有高于阈值的非零值。
In [826]: sparse.triu(M>2).A
Out[826]:
array([[False, False, False],
[False, True, True],
[False, False, True]], dtype=bool)
In [827]: sparse.triu(M>2).nonzero()
Out[827]: (array([1, 1, 2], dtype=int32), array([1, 2, 2], dtype=int32))
这是 triu
的代码:
def triu(A, k=0, format=None):
A = coo_matrix(A, copy=False)
mask = A.row + k <= A.col
row = A.row[mask]
col = A.col[mask]
data = A.data[mask]
return coo_matrix((data,(row,col)), shape=A.shape).asformat(format)