Vektorisierung numpy bilcount

8

Ich habe ein 2d numpy Array., A Ich möchte np.bincount() auf jede Spalte der Matrix A anwenden, um ein weiteres 2D-Array B zu erzeugen, das sich aus den Einzelbits jeder Spalte des Originals zusammensetzt Matrix A .

Mein Problem ist, dass np.bincount () eine Funktion ist, die ein 1d-array-like benötigt. Es ist keine Array-Methode wie zum Beispiel B = A.max(axis=1) .

Gibt es eine pythonisch / numpythische Art, dieses B -Array anders als eine fiese For-Schleife zu erzeugen?

%Vor%     
user3556757 14.11.2016, 15:01
quelle

4 Antworten

3

Mit der gleichen Philosophie wie in this post , hier ist ein vektorisierter Ansatz -

%Vor%     
Divakar 14.11.2016 16:26
quelle
2

Ich würde vorschlagen, np.apply_along_axis zu verwenden, was Ihnen erlauben wird um eine 1D-Methode (in diesem Fall np.bincount ) auf 1D-Schichten eines höherdimensionalen Arrays anzuwenden:

%Vor%

Sie müssen jedoch vorsichtig sein. Dies (wie auch Ihr vorgeschlagener for -loop) funktioniert nur, wenn die Ausgabe von np.bincount die richtige Form hat. Wenn der maximale Status nicht in einer oder mehreren Spalten Ihres Arrays A vorhanden ist, hat die Ausgabe keine kleinere Dimensionalität und der Code wird daher mit einem ValueError gespeichert.

    
jotasi 14.11.2016 15:15
quelle
1

Diese Lösung, die das Paket numpy_indexed verwendet (Disclaimer: Ich bin der Autor), ist vollständig vektorisiert und enthält daher keine Python-Schleifen hinter den Kulissen. Außerdem gibt es keine Einschränkungen für die Eingabe. Nicht jede Spalte muss denselben Satz eindeutiger Werte enthalten.

%Vor%

Dies gibt eine alternative (spärliche) Darstellung des gleichen Ergebnisses, die viel passender sein kann, wenn das B-Array tatsächlich viele Nullen enthält:

%Vor%

Beachten Sie, dass apply_along_axis nur syntaktischer Zucker für eine for-Schleife ist und die gleichen Leistungsmerkmale aufweist.

    
Eelco Hoogendoorn 14.11.2016 16:10
quelle
1

Noch eine andere Möglichkeit:

%Vor%

Zum Beispiel

%Vor%     
Warren Weckesser 14.11.2016 16:32
quelle

Tags und Links