2014-10-21 6 views
1

두 개의 2d 비트 배열 (1과 0 만 가능)이 있습니다. 나는 array1이 조건과 일치 할 때 array2의 값을 변경셀 이웃을 포함하는 같은 모양의 두 numpy 배열 사이의 파이썬 상호 작용

array2 = numpy.where(array1, 0, array2) 

을하고있는 중이 야. 그러나 만약 내가 조건을 만족한다면 그 바로 그 세포의 값을 바꾸고 싶지는 않지만 그 이웃 세포의 값을 바꾸고 싶다면 어떻게 될까? 내 말은, i,j 대신에 array1True으로 밝혀졌습니다. 하위 배열 array2[i-1:i+2,j-1:j+2]을 변경하고 싶습니다. 큰 배열에서 실제로 느려지는 루핑을 피할 수 있습니까?

답변

1

footprint 인수가 (3, 3) 것, 당신의 예를 그렇게

scipy.ndimage.filters.generic_filter를 참조 그 세 3의 이웃과 조건이 true 또는 false 인 경우 반환해야하여 function 인수입니다;

뭔가 같은 :

func = lambda xs: np.any(xs) # or whatever appropriate 
mask = generic_filter(array1, func, footprint=(3, 3)) 
array2[mask] = 0