2017-12-31 142 views
1

나는 numpy 배열로 흑백 이미지를로드했습니다. 배열 모양은 이미지의 픽셀과 같습니다.인덱스 값이 문자열 인 슬라이스 목록은 무엇입니까?

numpy_array_to_slice[160:300,28:43] 

등의 특정 픽셀 값 범위를 추출하고 싶지만 색인 번호를 하드 코딩하고 싶지는 않습니다. 오히려 값 목록에서 인덱스 값을로드하려고합니다. 나는했습니다

numpy_array_to_slice['160:300,28:43'] 

:의 자리를 차지할 것

numpy_array_to_slice[listofindexvalues[0]] 

: 그래서 효과적으로 내가 좋아하는 뭔가를 원하는

listofindexvalues = [['160:300,28:43'],['160:300,40:55'],['160:300,28:43']] 

: 예를 들어, 내가 좋아하는 인덱스 값의 목록을 가지고 다음과 같이 작동하지 않는 다양한 작업을 시도했습니다.

first,second = str(index_list[19]).replace('[','').replace(']','').replace('\'','').split(':') ##for just one side of an index value, such as 28:59 

및과 같이 되었하려고 :

numpy_array_to_slice[int(first)+':'+int(second] 

하지만 그 값을 연결할 수 없기 때문에이 작동하지 않습니다. 이것을 달성 할 방법이 있습니까?

답변

5

문자열이 아닌 구문입니다. Slicings expressions reference documentation :

슬라이스의 의미는 다음과 같습니다. 기본 키는 다음과 같이 슬라이스 목록에서 생성 된 키로 색인화됩니다 (일반 구독과 동일한 메소드 사용). 슬라이스 목록에 하나 이상의 쉼표가 있으면 키는 슬라이스 항목의 변환을 포함하는 튜플입니다. 그렇지 않으면, 유일한 조각 항목의 변환이 핵심입니다. 표현식 인 슬라이스 항목의 변환은 표현식입니다. 올바른 슬라이스의 변환은 start, stopstep 속성이 누락 된 표현식에 대해 각각 None을 바운드, 상한 및 스트라이드로 주어진 표현식의 값으로 사용하는 slice 객체 (섹션 The standard type hierarchy 참조)입니다.

대담한 강조 광산.

slice() 개체를 직접 생성하여이 전환 (슬라이스 구문에서 slice() 개체로)을 건너 뛸 수 있습니다. 필요한 경우 튜플에 넣을 수 있습니다.

그래서

numpy_array_to_slice[160:300,28:43] 

나는 step 인수를 생략 한

box = slice(160, 300), slice(28, 43) 
numpy_array_to_slice[box] 

에 해당; 누락되면 기본값은 None입니다.

목록이 확장은 다음과 같습니다

listofindexvalues = [ 
    (slice(160, 300), slice(28, 43)), 
    (slice(160, 300), slice(40, 55)), 
    (slice(160, 300), slice(28, 43)) 
] 

for box in listofindexvalues: 
    sliced_array = numpy_array_to_slice[box] 
+0

설명서를 읽었을지라도 쉽게 이해할 수 있을지 확신 할 수 없습니다. 다시 한 번 감사드립니다. –

1

당신은 slice 인스턴스 (또는 튜플 그)가 아닌 문자열 목록을 사용해야합니다.

다음은 예입니다.

>>> import numpy as np 
>>> 
>>> listofindexvalues = [(slice(1, 6), slice(3, 4))] 
>>> a = np.arange(100).reshape(10,10) 
>>> a[listofindexvalues[0]] 
array([[13], 
     [23], 
     [33], 
     [43], 
     [53]]) 

a[listofindexvalues[0]]이 경우 a[1:6, 3:4] 동일하다.

>>> a[1:6, 3:4] 
array([[13], 
     [23], 
     [33], 
     [43], 
     [53]]) 
+1

신난다, 고마워! –