sqrt для поэлементной разреженной матрицы

У меня есть разреженная матрица:

from scipy import sparse
a = sparse.diags([1,4,9],[-1,0,1],shape =(10,10),format ="csr")

Я хочу взять квадратный корень каждого из элементов разреженной матрицы, которую я ищу в Интернете, и там говорится, что я могу использовать numpy.sqrt() для реализации этого. Но возникает ошибка:

  b = numpy.sqrt(a)
  AttributeError: sqrt

Как мне это сделать?


person Guangyue He    schedule 12.01.2014    source источник
comment
Я думаю, что на ваш вопрос дан ответ здесь: вы можете использовать a.sqrt() или воздействовать на a.data для всего, что не имеет собственного хука.   -  person DSM    schedule 12.01.2014
comment
@DSM: a.sqrt() должен быть ответом.   -  person Warren Weckesser    schedule 12.01.2014
comment
@DSM спасибо. a.sqrt() работает. Просто нужно убедиться, что установлена ​​правильная версия scipy.   -  person Guangyue He    schedule 12.01.2014
comment
@DSM Что, если я хочу получить степень двойки (квадрата) каждого из элементов разреженной матрицы? Какие-либо предложения? благодаря.   -  person Guangyue He    schedule 12.01.2014
comment
@DSM для квадрата, я только что узнал метод. a.multiply(a) работает. Я могу использовать его как замену.   -  person Guangyue He    schedule 12.01.2014


Ответы (2)


Предупреждение: это создаст результирующий пустой массив ndarray вместо разреженного массива csr.

from scipy import sparse
a = sparse.diags([1,4,9],[-1,0,1],shape =(10,10),format ="csr")

numpy.sqrt(a.data)

Насколько я могу судить, большинство других операций ufunc (sin, cos,...) имеют разреженные ufunc, за исключением sqrt, не знаю почему. См. этот выпуск: https://github.com/scipy/scipy/pull/208

person Stephen Diehl    schedule 12.01.2014

Если вы хотите вернуть разреженную матрицу (что вы почти наверняка сделаете!), вы можете вместо этого применить функцию к a.data.

>>> from scipy import sparse
>>> import numpy as np
>>> a = sparse.diags([1,4,9],[-1,0,1],shape =(10,10),format ="csr")
>>> a.data = np.sqrt(a.data)
>>> a
<10x10 sparse matrix of type '<class 'numpy.float64'>'
        with 28 stored elements in Compressed Sparse Row format>

Отдайте должное комментарию DSM для этого ответа.

person Scott Gigante    schedule 14.04.2018