Próbowałem zainicjować csc_matrix
i csr_matrix
z listy wartości (data, (rows, cols))
, zgodnie z sugestią dokumentacji.Ignorowanie duplikatów wpisów w rzadkiej macierzy
sparse = csc_matrix((data, (rows, cols)), shape=(n, n))
Problemem jest to, że sposób, że rzeczywiście mają do generowania data
, rows
i cols
wektory wprowadza duplikaty dla niektórych punktach. Domyślnie scipy dodaje wartości duplikatów. Jednak w moim przypadku te duplikaty mają dokładnie taką samą wartość w przypadku data
dla danego (row, col)
.
Próbuję osiągnąć to, że scipy zignoruje drugi wpis, jeśli już istnieje, zamiast je dodawać.
Ignorując fakt, że mogłem poprawić algorytm generowania, aby uniknąć generowania duplikatów, czy istnieje parametr lub inny sposób tworzenia rzadkiej macierzy, która ignoruje duplikaty?
Obecnie dwa wpisy z generują rzadką macierz, której wartość pod adresem (1,1)
to 8
, a pożądaną wartością jest 4
.
>>> c = csc_matrix(([4, 4], ([1,1],[1,1])), shape=(3,3))
>>> c.todense()
matrix([[0, 0, 0],
[0, 8, 0],
[0, 0, 0]])
Jestem też świadomy, że mogę filtrować je za pomocą 2-wymiarową numpy unique
funkcję, ale listy są dość duży, więc to nie jest tak naprawdę ważne rozwiązaniem.
Inne możliwe odpowiedzi na pytanie: Czy istnieje sposób określenia, co zrobić z duplikatami? tj. zachowując min
lub max
zamiast domyślnego sum
?
Jestem pewien, że odpowiedź brzmi nie, nie ma wbudowanego sposobu zmiany zachowania duplikatów. Nie należy jednak zbyt szybko rezygnować z używania słowa 'np.unique': niezależnie od tego, jak duże są twoje listy, scipy zamieni je na tablice i wykona podobne operacje pod maską, więc nie ma powodu, dla którego nie należy próbować. – Jaime
'np.unique' to 1d, więc obsługa tych współrzędnych 2d będzie wymagać dodatkowego wysiłku. – hpaulj
To prawda, ale takie sztuczki jak [this] (http://stackoverflow.com/questions/16970982/find-unique-rows-in-numpy-array) czynią to 2D. –