如何向量化numpy中的嵌套for循环

how to vectorize nested for loops in numpy

我一直在尝试解决这个问题,但我陷入了困境

v,u,j=file.shape
for v in range(height):
  for u in range(width):
    start[v,u,0] = -0.5 + u / (width-1)
    start[v,u,1] = (-0.5 + v / (height-1)) * height / width
    start[v,u,2] = 0

我用了这个功能后就没办法了

   v,u,j=file.shape
   x,y,z=np.mgrid(0:v,0:u,0:j)

我希望你能帮助我提供详细的解决方案以更好地理解该机制 提前致谢

您应该始终提供 minimal working example。否则我们只能猜测。

我已将您的代码转换为这个工作示例。它可能反映也可能不反映您真正想做的事情:

file = np.random.random((300, 200, 3))

start = np.empty_like(file)
height, width, _ = file.shape
for v in range(height):
    for u in range(width):
        start[v, u, 0] = -0.5 + u / (width - 1)
        start[v, u, 1] = (-0.5 + v / (height - 1)) * height / width
        start[v, u, 2] = 0

以下代码产生相同的结果。请注意在每个表达式中单个值如何被向量替换:

start_bis = np.zeros_like(file)
u = -0.5 + np.arange(width) / (width - 1)
v = (-0.5 + np.arange(height) / (height - 1)) * height / width
start_bis[..., 0], start_bis[..., 1] = np.meshgrid(u, v)