2016-05-07 6 views
0
A = sparse([4 0 0; 0 0 0; 4 0 0]) 
D = Diagonal([1;3;4]) 
D*A 

Дает ошибку, что для этой операции не существует метода *. Есть ли простой способ для выполнения операции?Julia: Diagonal times Sparse Matrix

+0

Это исправлено в разрабатываемой версии. –

ответ

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) 
+0

Есть ли недостаток/накладные расходы для использования разреженной матрицы для диагональной матрицы? –

+1

Конечно, да, но пока есть лучшие варианты, это лучший способ обхода. https://github.com/timholy/ArrayIteration.jl старается сделать это ненужным, позволяя писать общие методы, которые обрабатывают любой тип разреженного массива. – tholy

 Смежные вопросы

  • Нет связанных вопросов^_^