Следующая уловка работает для любой операции, которая отображает ноль в ноль, и только для этих операций, потому что она касается только ненулевых элементов.То есть, это будет работать для 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
.