Funktionen zur Übersicht über wiederholte IndizesPython

Python-Programme
Guest
 Funktionen zur Übersicht über wiederholte Indizes

Post by Guest »

Wir suchen nach Möglichkeiten, diesen kleinen Schritt in einer großen Pipeline zu verbessern, die wir entwickeln. Das Problem ist:
Geben: multiple np.ndarray Objekte des ganzzahligen Datenatyps, die Pixelindizes und einen einzelnen NP.NDARRAY vom schwimmenden Typ, der ein Gewicht beschreibt. Alle diese Arrays haben die gleiche Form/Größe. ist jetzt eindeutig durch Konstruktion). Eine ziemlich robuste Methode, aber es ist ziemlich langsam. Betrachten Sie: < /p>

Code: Select all

x = np.array([1, 1, 2, 2, 3, 3, 1, 1, 3, 3, 4], dtype=np.uint16)
y = np.array([1, 1, 2, 2, 2, 2, 1, 1, 3, 4, 5], dtype=np.uint16)
l = np.array([1, 2, 2, 2, 3, 2, 1, 1, 3, 3, 6], dtype=np.uint16)
v = np.array([2, 4, 6, 8, 7, 5, 3, 1, 8, 6, 4], dtype=np.float64)

indices = (x, y, l)
dims = [np.amax(index) + 1 for index in indices]
idx = np.ravel_multi_index(indices, dims, order='F')

out, uind, cinv = np.unique(idx, return_index=True, return_inverse=True)
vv = np.bincount(cinv, weights=v)

out = tuple(index[uind] for index in indices)
ret = (vv, *out)
< /code>
Dies funktioniert und gibt das erwartete Ergebnis zurück: < /p>
print(vv, out)
< /code>
array([ 6.,  4., 14.,  5.,  7.,  8.,  6.,  4.])
array([1, 1, 2, 3, 3, 3, 3, 4], dtype=uint16)
array([1, 1, 2, 2, 2, 3, 4, 5], dtype=uint16)
array([1, 2, 2, 2, 3, 3, 3, 6], dtype=uint16)
< /code>
Dies ist ein MWE mit kleinen Arrays, aber in der Praxis sind diese Arrays weit über eine Million Elemente.  Und dies wirft das Problem auf, dass der Anruf bei NP.unique 
mit diesen Einstellungen sehr langsam ist. Wir haben ein paar Dinge ausprobiert: Verwenden von CSR_Matrix oder numba , und aus verschiedenen Gründen waren sie nicht viel besser. diese Arten von Berechnungen durchzuführen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post