このような配列がある場合:
a = np.array([[ 1, 2, 3, 4],
[ 5 ,6, 7, 8],
[ 9,10,11,12],
[13,14,15,16]])
「解像度を変更」して、配列を小さくしたい(たとえば、2行×2列、または2行×4列など)。この解像度の変更は、合計によって発生するようにします。大きな配列で動作するためにこれが必要です。行の数、小さな配列の列は常に大きな配列の要因になります。
上記の配列を2x2の配列に減らすと、次のようになります(これが私が望むものです)。
[[ 14. 22.]
[ 46. 54.]]
私はそれをうまく行うこの関数を持っています:
import numpy as np
def shrink(data, rows, cols):
shrunk = np.zeros((rows,cols))
for i in xrange(0,rows):
for j in xrange(0,cols):
row_sp = data.shape[0]/rows
col_sp = data.shape[1]/cols
zz = data[i*row_sp : i*row_sp + row_sp, j*col_sp : j*col_sp + col_sp]
shrunk[i,j] = np.sum(zz)
return shrunk
print shrink(a,2,2)
print shrink(a,2,1)
#correct output:
[[ 14. 22.]
[ 46. 54.]]
[[ 36.]
[ 100.]]
私は例を長い間見てきましたが、役立つものを見つけることができないようです。
ループを必要とせずにこれを行うためのより速い方法はありますか?