2016-01-29 25 views
5

Nie wiem, czy to możliwe, i jest to prawdopodobnie naiwne pytanie, ale jak ustawić odpowiednik rownames() R i colnames() na scipy.sparse.csr.csr_matrix?Jak mogę podać nazwy wierszy i kolumn dla csr_matrix Scipy?

Widziałem, że my_matrix.dtype.names tu nie pracuje, i nie mogę znaleźć żadnej „indeks” equivalend dla takiej rzadkiej matrycy ...

Ponadto pandas.sparse.* nie jest opcją tutaj, z powodu jakiegoś problemu otwartego ...

Dziękuję bardzo za pomoc,

+0

'dtype.names' odnosi się do' pól' tablicy strukturalnej. Pomyśl o nazwach kolumn/nagłówkach w tabeli CSV. Na polach nie można wiele matematyki. I nie można używać tego typu dtype w rzadkich macierzach. – hpaulj

Odpowiedz

3

Musisz zachować nazwy oddzielnie, jak żaden z nielicznych formatów scipy obsługują nazwie indeksowania. Może to wyglądać następująco:

foo = csr_matrix(...) 
row_names = np.array(...) 
col_names = np.array(...) 

# index by name: 
row_idx, = np.where(row_names == "my row") 
col_idx, = np.where(col_names == "my col") 
foo[row_idx, col_idx] 
+0

Zastanawiam się, czy wygląd słownika będzie szybszy? Rzadki format 'dok' jest w rzeczywistości słownikiem, z indeksem krotek jako kluczy. – hpaulj

+0

Efektywność zależy od rozmiaru i sparyity matrycy, ale tak, również słowniki nazwa-> index również. Format DOK nie pomaga, ponieważ jego klucze muszą być parami liczb całkowitych. – perimosocordiae

+0

Ale może stworzyć własny słownik z krotkami etykiet jako kluczami. Nie da mu żadnych umiejętności matematycznych. – hpaulj