2012-10-05 3 views
1

각 요소에 두 개의 구성 요소가있는 2 차원 배열 인 'numpy'배열 'image'가 있습니다. 각 요소에 세 가지 구성 요소가있는 다른 2 차원 배열로 변환하고 싶습니다. 그래서 같은 처음 두 계산 처음 두와 세 번째는 :계산 된 값 요소를 다차원 numpy 배열에 빠르게 추가하는 방법

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

당신은 이미지의 구성 요소를 분리하고 대신 여러 개의 이미지로 일할 수 :

: 어떤 이유로 당신은 당신이뿐만 아니라 다른 세 가지 차원 영상을 구성 할 수 지정된 레이아웃이 필요하면

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

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

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.) 
+0

똑똑한 내가 찾고 있던 것! –

관련 문제