Der Code für sparse.hstack
ist
return bmat([blocks], format=format, dtype=dtype)
für bmat
, dann ist ein blocks
1xN
Array. Wenn sie alle csc
sind, hat es eine schnelle Version des Stapels:
A = _compressed_sparse_stack(blocks[0,:], 1)
Umgekehrt sparse.vstack
mit csr
Matrizes tut
A = _compressed_sparse_stack(blocks[:,0], 0)
In der Tat gegeben, wie die Daten in einer csr
Matrix gespeichert ist es relativ leicht zu fügen Sie Zeilen (oder Spalten für csc
) hinzu (ich kann das erläutern, wenn das eine Erläuterung benötigt).
Ansonsten bmat
tut:
# convert everything to COO format
# calculate total nnz
data = np.empty(nnz, dtype=dtype)
for B in blocks:
data[nnz:nnz + B.nnz] = B.data
return coo_matrix((data, (row, col)), shape=shape).asformat(format)
Mit anderen Worten: es wird die data
, row
, col
Werte für jeden Block, verkettet sie, macht eine neue coo
Matrix und schließlich wandelt sie in dem Wunsch Format.
sparse
konvertiert problemlos zwischen den Formaten. Sogar die Anzeige einer Matrix kann eine Konvertierung beinhalten - für das (i,j) d
Format, für csr für dichtes/Array. sparse.nonzero
konvertiert zu coo
. Die meisten mathematischen Formeln werden in csr
konvertiert. Ein csr
wird transponiert, indem es in einen csc
(ohne Änderung der Attributarrays) umgewandelt wird. Ein Großteil der Konvertierung erfolgt im kompilierten Code, sodass Sie keine Verzögerungen sehen.
Hinzufügen von Spalten direkt zu csr
Format ist eine Menge Arbeit. Alle 3 Attributfelder müssen Zeile für Zeile geändert werden. Auch hier könnte ich bei Bedarf ins Detail gehen.
Dies ist nicht möglich ohne Konvertierung in ein anderes Format dazwischen. Ein effizientes Hinzufügen einer Zeile ist in CSR möglich, ein effizientes Hinzufügen einer Spalte ist jedoch nicht möglich. Wenn Sie Spalten hinzufügen müssen, sollten Sie besser ein anderes Format verwenden. –
ok - also Transponieren, Hinzufügen von Zeilen und Transponieren sollte wieder zum Trick, aber es ist nicht so performant ... – quester
ok Ich fand die Antwort ... scipy.sparse.vstack und scipy.sparse.hstack – quester