Юлия: Диагональ, умноженная на разреженную матрицу

A = sparse([4 0 0; 0 0 0; 4 0 0])
D = Diagonal([1;3;4])
D*A

Выдает ошибку, что нет метода * для выполнения этой операции. Есть ли простой способ выполнить операцию?


person Chris Rackauckas    schedule 07.05.2016    source источник
comment
Это исправлено в разрабатываемой версии.   -  person Andreas Noack    schedule 08.05.2016


Ответы (1)


С преобразованием:

julia> convert(SparseMatrixCSC{Int64,Int64},D)*A
3x3 sparse matrix with 2 Int64 entries:
    [1, 1]  =  4
    [3, 1]  =  16

Общее решение из сообщения об ошибке:

julia> f(a,b)
ERROR: MethodError: `f` has no method matching f(::T1, ::T2)

Do:

julia> f(convert(T2,a),b)
person Qni    schedule 07.05.2016
comment
Есть ли недостатки / накладные расходы при использовании разреженной матрицы для диагональной матрицы? - person Chris Rackauckas; 07.05.2016
comment
Конечно, да, но пока не появятся лучшие варианты, это лучший обходной путь. github.com/timholy/ArrayIteration.jl стремится сделать это ненужным, позволяя писать общие методы, которые обрабатывают любой тип разреженного массива. - person tholy; 07.05.2016