2013-07-18 13 views
6

Sto lavorando a un programma per l'analisi del sistema di alimentazione e ho bisogno di lavorare con matrici sparse.Aggiungere valori a una matrice sparsa Scipy con indici e valori

C'è una routine in cui mi riempio una matrice sparsa solo con la seguente chiamata:

self.A = bsr_matrix((val, (row,col)), shape=(nele, nbus), dtype=complex) 

Poiché questa matrice non cambierà nel corso del tempo. Ancora un'altra matrice cambia nel tempo e ho bisogno di aggiornarla. C'è un modo che avere, ad esempio:

co  = [ 2, 3, 6] 
row = [ 5, 5, 5] 
val = [ 0.1 + 0.1j, 0.1 - 0.2j, 0.1 - 0.4j] 

posso aggiungere quelli a una matrice sparsa in precedenza inizializzato? Come sarebbe il modo più plateale di farlo?

Grazie

risposta

3

È necessario utilizzare un coo_matrix, invece, in cui è possibile modificare gli attributi col, row e data di una matrice sparsa creato in precedenza:

from scipy.sparse import coo_matrix 
nele=30 
nbus=40 
col = [ 2, 3, 6] 
row = [ 5, 5, 5] 
val = [ 0.1 + 0.1j, 0.1 - 0.2j, 0.1 - 0.4j] 
test = coo_matrix((val, (row,col)), shape=(nele, nbus), dtype=complex) 

print test.col 
#[2 3 6] 
print test.row 
#[5 5 5] 
print test.data 
#[ 0.1+0.1j 0.1-0.2j 0.1-0.4j] 
+0

Grazie. Ho letto nella documentazione che: _Per impostazione predefinita durante la conversione in formato CSR o CSC, le voci duplicate (i, j) verranno sommate insieme. Ciò facilita la costruzione efficiente di matrici di elementi finiti e simili. (vedi esempio) _ Che più o meno risolve il problema che ho avuto. Nel mio codice, ci sono diversi oggetti che contribuiscono a questa matrice e due oggetti possono contribuire alla stessa voce (i, j). Ciò significa che ogni volta che voglio aggiungere il contributo di un oggetto devo ricostruire la matrice? – amalbe

+0

hi ... sì, puoi usare i diversi oggetti per costruire la matrice semplicemente assegnando i parametri 'col' e' row' alla 'coo_matrix'. Non sono sicuro se 'SciPy' creerà o meno una copia interna durante la costruzione della matrice sparsa –

Problemi correlati