5

NumPy を使用してループ反復をベクトル化しようとしていますが、目的の結果を達成するのに苦労しています。私はピクセル値の配列を持っているので、3次元、たとえば(512,512,3)で、各x、yを反復し、3次元の特定のインデックスを使用して別の値を計算する必要があります。標準ループでのこのコードの例は次のとおりです。

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 は 1 つのセルの計算にすぎません。

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 を使用してファイルからロードする場合は機能しません。

4

1 に答える 1