如何使用numpy的切片和矢量化(自动循环)计算来加速跟随纯Python代码
def foo(x, i, j):
return x + i + j % 255
h, w = img.shape[:2] # img is a numpy array of shape (100,100,1)
out_img = img.copy()
for i in xrange(h):
for j in xrange(w):
out_img[i][j] = foo(img[i][j], i, j)
如果foo的形式是' foo(img [i] [j])' (没有循环变量作为参数),以下为我工作
out_img[0:,0:] = foo(img[0:,0:])
注意:与纯python相比,Numpy为上述情况提供了~70倍的加速。
我无法想象如何使用循环变量作为参数使其适用于函数foo 有人可以帮忙吗?
答案 0 :(得分:4)
您可以使用numpy.indices
,例如:
out_img = foo(img, *np.indices(shape=(h,w)))
或稍微更明确:
h_indices, w_indices = np.indices(shape=(h,w))
out_img = foo(img, h_indices, w_indices)
说明np.indices
的作用:
np.indices((3,2))
=>
array([[[0, 0],
[1, 1],
[2, 2]],
[[0, 1],
[0, 1],
[0, 1]]])