Funktionen zur Übersicht über wiederholte Indizes

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Funktionen zur Übersicht über wiederholte Indizes

by Guest » 05 Feb 2025, 01:47

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?

Top