【问题标题】:how to vectorize nested for loops in numpy如何在numpy中矢量化嵌套的for循环
【发布时间】:2021-11-11 20:57:46
【问题描述】:

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

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)

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

【问题讨论】:

  • 你的代码不清楚,heightweight是什么? j 有什么作用吗?

标签: python numpy vectorization


【解决方案1】:

您应该始终提供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)

【讨论】:

    猜你喜欢
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 2015-11-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多