2013-07-18 20 views
6

Pracuję w programie do analizy Power System i muszę pracować z rzadkimi macierzami.Dodaj wartości do rzadkiej macierzy Scipy z indeksami i wartościami

Jest rutynowe gdzie wypełnić rzadki matrycy tylko z poniższej rozmowy:

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

W tej macierzy nie zmienia się w czasie. Kolejna macierz zmienia się z czasem i muszę ją zaktualizować. Czy istnieje sposób, że mając na przykład:

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

mogę dodać te do wcześniej inicjowane rozrzedzony matrycy? Jak byłoby to bardziej pythonic sposób to zrobić?

Dziękuję

Odpowiedz

3

Należy użyć coo_matrix zamiast, gdzie można zmieniać atrybuty col, row i data z wcześniej utworzonego rozrzedzony matrycy:

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

dziękuję. Przeczytałem w dokumentacji, że: _By domyślnie przy konwersji do formatu CSR lub CSC, duplikaty (i, j) będą sumowane. Ułatwia to wydajną budowę macierzy elementów skończonych i tym podobnych. (patrz przykład) _ To mniej więcej rozwiązuje problem, który miałem. W moim kodzie jest kilka obiektów, które przyczyniają się do tej macierzy i dwa obiekty mogą przyczynić się do tego samego (i, j) wpisu. Oznacza to, że za każdym razem, gdy chcę dodać wkład jednego obiektu, muszę przebudować macierz? – amalbe

+0

cześć ... tak, możesz użyć różnych obiektów do zbudowania macierzy, po prostu przypisując parametry 'col' i' row' do 'coo_matrix'. Nie jestem jednak pewien, czy 'SciPy' stworzy kopię wewnętrzną, czy nie, podczas budowania macierzy rzadkiej –

Powiązane problemy