我正在尝试使用 NumPy 对循环迭代进行矢量化,但正在努力实现预期的结果。我有一个像素值数组,所以 3 维,比如 (512,512,3) 并且需要迭代每个 x,y 并使用第三维中的特定索引计算另一个值。此代码在标准循环中的示例如下:
for i in xrange(width):
for j in xrange(height):
temp = math.sqrt((scalar1-array[j,i,1])**2+(scalar2-array[j,i,2])**2)
我目前正在做的是这样的:
temp = np.sqrt((scalar1-array[:,:,1])**2+(scalar2-array[:,:,2])**2)
我从中得到的临时数组是所需的维度 (x,y),但其中一些值与循环实现不同。如何消除循环以在 NumPy 中有效地计算此示例?
提前致谢!
编辑:
这是给我 temp 和 temp2 不同结果的代码,显然 temp2 只是一个单元格的计算
temp = np.sqrt((cb_key-fg_cbcr_array[:,:,1])**2+(cr_key-fg_cbcr_array[:,:,2])**2)
temp2 = np.sqrt((cb_key-fg_cbcr_array[500,500,1])**2+(cr_key-fg_cbcr_array[500,500,2])**2)
print temp[500, 500]
print temp2
上面的输出是
12.039
94.069123521
标量绝对被初始化,并且数组是从使用图像生成的
fg = PIL.Image.open('fg.jpg')
fg_cbcr = fg.convert("YCbCr")
fg_cbcr_array = np.array(fg_cbcr)
编辑2:
好的,所以我已将其归结为阵列的问题。不知道为什么,但它在使用 np.random.random 生成数组时有效,但在使用上述 PIL 从文件加载时无效。