【发布时间】:2013-09-05 20:08:41
【问题描述】:
我有一个数组,我想通过扫描 2x2 非重叠窗口并获得最大值来生成一个较小的数组。这是一个例子:
import numpy as np
np.random.seed(123)
np.set_printoptions(linewidth=1000,precision=3)
arr = np.random.uniform(-1,1,(4,4))
res = np.zeros((2,2))
for i in xrange(res.shape[0]):
for j in xrange(res.shape[1]):
ii = i*2
jj = j*2
res[i][j] = max(arr[ii][jj],arr[ii+1][jj],arr[ii][jj+1],arr[ii+1][jj+1])
print arr
print res
所以一个像这样的矩阵:
[[ 0.393 -0.428 -0.546 0.103]
[ 0.439 -0.154 0.962 0.37 ]
[-0.038 -0.216 -0.314 0.458]
[-0.123 -0.881 -0.204 0.476]]
应该变成这样:
[[ 0.439 0.962]
[-0.038 0.476]]
我怎样才能更有效地做到这一点?
【问题讨论】:
-
你能告诉我们你尝试了什么以及为什么没有奏效吗?
-
上面的代码完成了所需的工作,但这需要很快,因此我想删除 for 循环
-
考虑使用NumBa。你可以让你的双循环保持原样,在装饰器中添加大约 10 个字符,并为此获得类似 C 的性能。如果您使用 Continuum Analytics 的 "Anaconda" Python 分发版,开箱即用即可轻松使用。
-
最佳答案在 cmets 中! stackoverflow.com/questions/18645013/…