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

Gibt den Fehler, dass es keine Methode * zur Durchführung dieser Operation gibt. Gibt es eine einfache Möglichkeit zur Durchführung der Operation?Julia: Diagonale Zeiten spärliche Matrix

+0

Dies ist in der Entwicklerversion behoben. –

Antwort

1

Mit convert:

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

Allgemeine Lösung, aus der Fehlermeldung:

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

Do:

julia> f(convert(T2,a),b) 
+0

Gibt es einen Nachteil/Overhead bei der Verwendung einer dünn besetzten Matrix für eine diagonale Matrix? –

+1

Sicher ja, aber bis es bessere Optionen gibt, ist es die beste Problemumgehung. https://github.com/timholy/ArrayIteration.jl zielt darauf ab, dies unnötig zu machen, indem es einem ermöglicht wird, generische Methoden zu schreiben, die jede Art von spärlich-artigem Array behandeln. – tholy