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)

  • Wie zu beheben "ValueError: muss mindestens ein Array zu verketten" Fehler
  • Höchste Palindrome mit 3-stelligen Zahlen in Python
  • Bestimmen Sie angrenzende Bereiche in numpy Array
  • Python Liste der Listen vs numpy
  • Effiziente Bestimmung, ob große sortierte numpy Array hat nur eindeutige Werte
  • Speicherleck in Python-Erweiterung, wenn Array mit PyArray_SimpleNewFromData () erstellt und zurückgegeben wird
  • 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.