1

各要素に2つのコンポーネントがある2次元配列であるnumpy配列'image'があります。これを、各要素に3つのコンポーネントがある別の2次元配列に変換したいと思います。最初の2つと最初の2つから計算された3つ目は、次のようになります。

for x in range(0, width):
    for y in range(0, height):
        horizontal, vertical = image[y, x]

        annotated_image[y, x] = (horizontal, vertical, int(abs(horizontal) > 1.0 or abs(vertical) > 1.0))

このループは期待どおりに機能しますが、他のnumpy関数と比較すると非常に低速です。中サイズの画像の場合、これには許容できない30秒かかります。

同じ計算をより速く行う別の方法はありますか?元の画像配列を保持する必要はありません。

4

1 に答える 1

4

画像のコンポーネントを分離して、代わりに複数の画像を操作することができます。

image_component1 = image[:, :, 0]
image_component2 = image[:, :, 1]

result = (np.abs(image_component1) > 1.) | (np.abs(image_component2) > 1.)

何らかの理由で指定したレイアウトが必要な場合は、別の3次元画像を作成することもできます。

result = np.empty([image.shape[0], image.shape[1], 3], dtype=image.dtype)

result[:, :, 0] = image[:, :, 0]
result[:, :, 1] = image[:, :, 1]
result[:, :, 2] = (np.abs(image[:, :, 0]) > 1.) | (np.abs(image[:, :, 1]) > 1.)
于 2012-10-05T11:08:27.320 に答える