Sie können einen höherdimensionalen Ansicht Ihres Arrays verwenden und die durchschnittliche entlang der zusätzlichen Dimensionen annehmen:
In [12]: a = np.arange(36).reshape(6, 6)
In [13]: a
Out[13]:
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 34, 35]])
In [14]: a_view = a.reshape(3, 2, 3, 2)
In [15]: a_view.mean(axis=3).mean(axis=1)
Out[15]:
array([[ 3.5, 5.5, 7.5],
[ 15.5, 17.5, 19.5],
[ 27.5, 29.5, 31.5]])
Im Allgemeinen, wenn Sie Bins Form wollen (a, b)
für eine Reihe von (rows, cols)
, Ihre Umbildung davon sollte .reshape(rows // a, a, cols // b, b)
sein. Man beachte auch, dass die Reihenfolge der .mean
wichtig ist, z. a_view.mean(axis=1).mean(axis=3)
wird einen Fehler verursachen, weil a_view.mean(axis=1)
nur drei Dimensionen hat, obwohl a_view.mean(axis=1).mean(axis=2)
wird gut funktionieren, aber es macht es schwerer zu verstehen, was vor sich geht.
Wie ist, der obige Code funktioniert nur, wenn Sie eine ganze Anzahl von Bins in Ihrem Array passen, das heißt, wenn a
rows
teilt und teilt b
cols
. Es gibt Möglichkeiten, mit anderen Fällen umzugehen, aber Sie müssen dann das gewünschte Verhalten definieren.
Sind die Untermatrizen garantiert passen genau? hast du numpige 1.7? verfügbar (das ist nur ordentlich, nicht notwendig)? – seberg
Ich habe numpy 1.8dev, aber mein Job wird ältere Version ... – user1187727