Numpy: Durchschnitt über eine Dimension im "gezackten" 3D-Array

Angenommen, ich habe ein N * M * X-dimensionales Array "data", wobei N und M fixiert sind, aber X für jede Eingangsdaten [n] [m] variabel ist.

(Bearbeiten: Um zu klären, habe ich gerade np.array () auf der 3D-Python-Liste verwendet, die ich zum Lesen in den Daten verwendet habe, also ist das numpy Array von Dimensionen N * M und seine Einträge sind Längen mit variabler Länge)

  • Konvertieren Sie numpy unit8 raw array direkt zu float32
  • Python: numpy list to array und vstack
  • Wie kann ich überprüfen, ob ein Punkt unter einer Linie liegt oder nicht?
  • Wie man zufällig Zeilen eines numpy Arrays verschiebt
  • Python - Konvertieren eines Arrays in eine Liste bewirkt, dass Werte geändert werden
  • Schreiben Sie doppelte (dreifache) Summe als inneres Produkt?
  • Ich möchte jetzt den Durchschnitt über die X-Dimension berechnen, damit ich mit einem N * M-dimensionalen Array belassen bin. Die Verwendung von np.average / mean mit dem Achsen-Argument funktioniert nicht, so dass die Art und Weise, wie ich es gerade mache, nur über N und M iteriert und den manuell berechneten Durchschnitt an eine neue Liste anhängt, aber das geht einfach nicht Fühle mich sehr "python":

    avgData=[] for n in data: temp=[] for m in n: temp.append(np.average(m)) avgData.append(temp) 

    Bin ich hier etwas offensichtlich? Ich versuche, meine Python-Fähigkeiten zu erfrischen, während ich dabei bin, so interessante / abwechslungsreiche Antworten sind mehr als willkommen! 🙂

    Vielen Dank!

    2 Solutions collect form web for “Numpy: Durchschnitt über eine Dimension im "gezackten" 3D-Array”

    Was ist mit der Verwendung von np.vectorize :

     do_avg = np.vectorize(np.average) data_2d = do_avg(data) 
     data = np.array([[1,2,3],[0,3,2,4],[0,2],[1]]).reshape(2,2) avg=np.zeros(data.shape) avg.flat=[np.average(x) for x in data.flat] print avg #array([[ 2. , 2.25], # [ 1. , 1. ]]) 

    Das ist immer noch über die Elemente der Daten (nichts un-Pythonic darüber). Aber da gibt es nichts Besonderes an der shape oder den data.flat , ich benutze nur data.flat . Beim Anfügen an die Python- list , mit numpy es besser, Werte zu den Elementen eines vorhandenen Arrays zuzuordnen.

    Es gibt schnelle numerische Methoden, um mit numpy Arrays zu arbeiten, aber die meisten (wenn nicht alle) arbeiten mit einfachen numerischen dtypes . Hier sind die Array-Elemente object (entweder Liste oder Array), numpy muss auf die üblichen Python-Iteration und Liste Operationen zurückgreifen.

    Für dieses kleine Beispiel ist diese Lösung etwas schneller als Zwickers vectorize . Für größere data dauern die beiden Lösungen gleichzeitig.

    Python ist die beste Programmiersprache der Welt.