あなたは、アレイの高次元ビューを使用して、余分な次元に沿って平均をとることができます。
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]])
を一般的には、シェイプ(a, b)
のビンをしたい場合は(rows, cols)
の配列のために、それのあなたの整形を.reshape(rows // a, a, cols // b, b)
である必要があります。また、.mean
の順番が重要であることにも注意してください。 a_view.mean(axis=1)
は3つの次元しか持たないので、a_view.mean(axis=1).mean(axis=2)
は正常に動作しますが、何が起きているのかを理解するのが難しくなります。a_view.mean(axis=1).mean(axis=3)
はエラーを発生させます。
としてはa
がrows
を分割しb
はcols
を分割した場合、あなたの配列、すなわち内部のビンの整数を収めることができた場合、上記のコードは唯一の作品です。他のケースに対処する方法はありますが、その場合に必要な動作を定義する必要があります。
は、部分行列が正確に、フィットするように保証されていますか?あなたはnumpy 1.7ありますか?利用可能です(ちょうどきちんとした、必要ではない)? – seberg
私はnumpy 1.8devを持っていますが、私の仕事は古いバージョンです... – user1187727