точечные операции над матрицами scipy.sparse

Можно ли применить, например, numpy.exp или аналогичные точечные операторы ко всем элементам в формате scipy.sparse.lil_matrix или другом формате разреженной матрицы?

import numpy
from scipy.sparse import lil_matrix

x = numpy.ones((10,10))
y = numpy.exp(x)

x = lil_matrix(numpy.ones((10,10)))
# y = ????

numpy.exp(x) или scipy.exp(x) дает AttributeError, а numpy.exp(x.data) дает то же самое.

Благодарность!


person hannes    schedule 25.03.2011    source источник
comment
Я думаю, что в настоящее время это не работает ни в одном из форматов разреженных матриц. Лично я считаю, что надо делать отдельные разреженные функции, а не тормозить штатные. Обходной путь, как показал Оливье, заключается в преобразовании практически в любой другой разреженный формат и работе с атрибутом data. Атрибут данных матриц lil не работает для этого, потому что это массив объекта типа.   -  person Justin Peel    schedule 25.03.2011


Ответы (1)


Я не знаю всех подробностей, но преобразование в другой тип работает, по крайней мере, при использовании массива ненулевых элементов:

xcsc = x.tocsc()
numpy.exp(xcsc.data) # works
person Olivier Verdier    schedule 25.03.2011
comment
Да. Как сказано в документах docs.scipy.org/ doc/scipy/reference/generated/ формат lil в основном предназначен для использования в качестве метода построения разреженных массивов, не выполняющих операций. Документы рекомендуют выполнять это преобразование после построения массивов. - person Paul; 25.03.2011