如果我有这样的数组:
a = np.array([[ 1, 2, 3, 4],
[ 5 ,6, 7, 8],
[ 9,10,11,12],
[13,14,15,16]])
我想“更改分辨率”,并最终得到一个较小的数组(比如 2 行乘 2 列,或 2 行乘 4 列等)。我希望通过求和来发生这种分辨率变化。我需要它来处理大型数组,较小数组的行数和列数将始终是较大数组的一个因素。
将上述数组减少为 2 x 2 数组将导致(这就是我想要的):
[[ 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.]]
我已经浏览了这些示例,但似乎找不到任何有帮助的东西。
有没有更快的方法来做到这一点,而不需要循环?