Ich habe ein Array von Integer-Labels und ich möchte bestimmen, wie viele von jedem Etikett vorhanden ist und diese Werte in einem Array mit der gleichen Größe wie die Eingabe speichern. Dies kann mit der folgenden Schleife durchgeführt werden:Rückgabe Array von Zählern für jedes Merkmal der Eingabe
def counter(labels):
sizes = numpy.zeros(labels.shape)
for num in numpy.unique(labels):
mask = labels == num
sizes[mask] = numpy.count_nonzero(mask)
return sizes
mit Eingang:
array = numpy.array([
[0, 1, 2, 3],
[0, 1, 1, 3],
[3, 1, 3, 1]])
counter()
Rückkehr:
array([[ 2., 5., 1., 4.],
[ 2., 5., 5., 4.],
[ 4., 5., 4., 5.]])
jedoch für großen Arrays mit vielen einzigartigen Etikett, 60.000 in Mein Fall, das kostet viel Zeit. Dies ist der erste Schritt in einem komplexen Algorithmus und ich kann es mir nicht leisten, mehr als 30 Sekunden für diesen Schritt zu verwenden. Gibt es eine Funktion, die bereits existiert, die dies erreichen kann? Wenn nicht, wie kann ich die bestehende Schleife beschleunigen?
Können Sie eine [MCVE] mit einer Probe Eingang und Ausgang? Warum funktioniert 'np.unique' nicht für Sie? –