2011-11-09 2 views
3

배열의 한 요소를 나타내는 인덱스 쌍을 알고있는 큰 2D numpy 배열이 있습니다. 이 요소와 주위의 20 × 20 영역을 0으로 설정하고 싶습니다. 나는 슬라이싱 기술을 사용하여 시도했다 :numpy 배열에서 알려진 인덱스 (x, y) 주위의 20x20 영역 분할하기

s = array[x:10, y:10] 
s == 0 

그러나 x와 y는 이전에 정의되었지만 이것은 '잘못된 슬라이스'이다.

필자는 파이썬을 처음 접했을 때이를 어떻게 달성 할 수 있는지에 대해 제안 해 주셔서 감사합니다.

답변

0

난 당신이 startstop은 제로 인덱스 어디 array[x:x+10,y:y+10]

+0

감사합니다.이 시도하고 다음 오류가 발생합니다; TypeError : 목록을 연결할 수 있습니다 ("int"가 아님) –

+0

x와 y는 무엇입니까? 왼쪽/위 모서리 인덱스를 나타내는 정수라고 가정 했습니까? 이미 x와 y가 beg/end index를 가지고 있다면'array [x [0] : x [1] + 1, y [0] : y [1] +1]'과 같은 것이 필요합니다. 또한 다른 답변이 지적한대로, 위의 솔루션은 10x10 하위 배열을 캡처합니다. – yosukesabai

3
my_array[x - 10:x + 10, y - 10:y + 10] = 0 

또는

s = my_array[x - 10:x + 10, y - 10:y + 10] 
s[:] = 0 
+0

TypeError : - : 'list'와 'int'에 대해 지원되지 않는 피연산자 유형이 있습니다. –

+1

@CandaceAdams : 그러면 'x'또는 'y'가 정수 대신 목록입니다. –

0

당신은 A[start:stop]으로 배열 A의 여러 요소를 선택 뜻 생각합니다.
2D 배열의 경우 다음과 같이 적용됩니다. A[start1:stop1, start2:stop2].

import numpy as np 

A = np.ones((5,5)) 

A 당신이

[[ 1. 1. 1. 1. 1.] 
[ 1. 0. 0. 0. 1.] 
[ 1. 0. 0. 0. 1.] 
[ 1. 0. 0. 0. 1.] 
[ 1. 1. 1. 1. 1.]] 
,536,913를 얻을이

[[ 1. 1. 1. 1. 1.] 
[ 1. 1. 1. 1. 1.] 
[ 1. 1. 1. 1. 1.] 
[ 1. 1. 1. 1. 1.] 
[ 1. 1. 1. 1. 1.]] 

A[1:4,1:4] = 0 

으로 보이는 다음 스크립트와

0

x, y 좌표의 가운데에 0의 블록을 표시하려면 크기가 홀수 여야합니다. 이 반면

import numpy 

a = numpy.ones((10,10)) 
x,y = 4,6 
s = 2 
a[x - s: x + s, y-s: y + s] = 0 

array([[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 0., 0., 0., 0., 1., 1.], 
     [ 1., 1., 1., 1., 0., 0., 0., 0., 1., 1.], 
     [ 1., 1., 1., 1., 0., 0., 0., 0., 1., 1.], 
     [ 1., 1., 1., 1., 0., 0., 0., 0., 1., 1.], 
     [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]]) 

: 예를 들어, 다음의 0의 블록 Y는 4,6 =하지만 중심에서 해당 셀의 좌표 즉, X, Y = 4.5, 5.5, 좌표 (X)을 중심으로되지 하나는 다음과 같습니다 :

a = numpy.ones((10,10)) 
x,y = 4,6 
s = 2 
a[x - s: x + s + 1, y-s: y + s + 1] = 0 
print a 

array([[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 0., 0., 0., 0., 0., 1.], 
     [ 1., 1., 1., 1., 0., 0., 0., 0., 0., 1.], 
     [ 1., 1., 1., 1., 0., 0., 0., 0., 0., 1.], 
     [ 1., 1., 1., 1., 0., 0., 0., 0., 0., 1.], 
     [ 1., 1., 1., 1., 0., 0., 0., 0., 0., 1.], 
     [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
     [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]]) 

스크립트가 픽셀 기반 이미지 처리를위한 것이라면 이는 중요한 차이 일 수 있습니다.

관련 문제