Ein anderer „Schurkenstaaten“ (aber schneller) Weg, um die gleichen Ergebnisse zu erhalten, ist durch die folgende Funktion definieren:
function Base.resize!{T,D}(sp::SparseMatrixCSC{T,D},m,n)
newcolptr = sp.colptr
resize!(newcolptr,n+1)
for i=sp.n+2:n+1
newcolptr[i] = sp.colptr[sp.n+1]
end
return SparseMatrixCSC(m,n,newcolptr,sp.rowval,sp.nzval)
end
Um die Funktion für das Problem im OP zu verwenden:
a = sparse([1,2],[1,2],[1,1])
a = resize!(a,3,3)
a[3,3] = 1
Diese Lösung ist "Rogue", weil sie nicht wirklich a
ändert, aber vergisst a
und bindet es an eine neue spärliche Matrix. Dies ist notwendig, da dünn besetzte Matrizen unveränderlich sind. Wenn Sie sowohl a
als auch den Rückgabewert resize!
behalten, werden sich beide Puffer im Speicher teilen und es können schlimme Dinge passieren. Auf der positiven Seite sollte es sehr schnell sein und das obige Anwendungsbeispiel birgt keine Gefahren.
P.S. Vielleicht ist die Überladung resize!
nicht die beste Idee.
vielen dank! genau was ich brauchte – isebarn