如何对scipy.sparse.csr_matrix类型的矩阵进行元素操作?
1 个回答
13
下面这个技巧适用于任何把零映射到零的操作,而且只适用于这些操作,因为它只处理非零的元素。也就是说,它适用于 sin
和 sqrt
,但不适用于 cos
。
假设 X
是一个CSR矩阵...
>>> from scipy.sparse import csr_matrix
>>> X = csr_matrix(np.arange(10).reshape(2, 5), dtype=np.float)
>>> X.A
array([[ 0., 1., 2., 3., 4.],
[ 5., 6., 7., 8., 9.]])
非零元素的值在 X.data
中:
>>> X.data
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9.])
你可以直接在这里更新这些值:
>>> X.data[:] = np.sqrt(X.data)
>>> X.A
array([[ 0. , 1. , 1.41421356, 1.73205081, 2. ],
[ 2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ]])
更新 在最近的SciPy版本中,你可以像这样使用 X.sqrt()
,其中 X
是一个稀疏矩阵,这样可以得到一个新的副本,里面是 X
中元素的平方根。