我正在尝试使用NumPy对循环迭代进行矢量化,但正在努力实现所需的结果。我有一个像素值数组,所以是三维的,比如说(512512,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)
我现在做的是:
^{pr2}$我从中得到的temp数组是所需的维度(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:
好的,我已经追踪到我的阵列有问题。还不确定原因,但当数组生成时随机随机但在使用PIL从文件中加载时则不是这样。在
你的矢量化解决方案是正确的。在
temp
是一个标量值,它只接受最后一个值np.sqrt
istead ofmath.sqrt
array
作为变量,因为它可以隐藏np.array
方法我使用以下代码进行了检查,这些代码可能会为您提供一些有关错误位置的提示:
相关问题 更多 >
编程相关推荐