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>
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?
Wir suchen nach Möglichkeiten, diesen kleinen Schritt in einer großen Pipeline zu verbessern, die wir entwickeln. Das Problem ist: [b] Geben: [/b] 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]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 = 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 [/code] 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?
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,...
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,...
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,...