过滤密集矩阵并变成稀疏的csr矩阵?

时间:2017-10-25 15:20:15

标签: python filter sparse-matrix

如果我有密集矩阵d

d = np.random.rand(4,4); d
>>> array([[ 0.95969707,  0.91678543,  0.28401043,  0.27390336],
   [ 0.50924662,  0.37591608,  0.32424021,  0.56422093],
   [ 0.61126002,  0.42979466,  0.67529606,  0.4462593 ],
   [ 0.12900253,  0.81314236,  0.40393894,  0.79878679]])

如何转换/过滤低于阈值的值并将其转换为0.0以便我可以将d变为稀疏的csr矩阵?所以在上面的示例中,第一个步骤将是这样的:

threshold = 0.8
d = d.filter(lambda x: x > threshold ); d # pseudo code - filter values below 0.8
>>> array([[ 0.95969707,  0.91678543,  0.0,  0.0],
   [ 0.0,  0.0,  0.0,  0.0],
   [ 0.0,  0.0,  0.0,  0.0],
   [ 0.0,  0.81314236,  0.0,  0.0]])

然后将d转换为稀疏的csr矩阵:

scipy.sparse.csr_matrix(d)
>>> <3x3 sparse matrix of type '<class 'numpy.int32'>'
    with 4 stored elements in Compressed Sparse Row format>

编辑:我见过像:

这样的方法
d = d[np.where(d>0.8)]; d
>>> array([ 0.95969707, 0.91678543 , 0.81314236])

但这不会保留d的形状,因此无法转换为csr矩阵

1 个答案:

答案 0 :(得分:1)

d[d<0.8] = 0.0
scipy.sparse.csr_matrix(d)

效果很好