2013-09-05 2 views
1

I 두 NumPy와 배열을 가지고설정 값과 두 개의 부울 배열

slice_ = (slice(5, 10), slice(5, 10)) 
: I는 어레이의 특정 부분을 추출하는 슬라이스의 튜플이

a = np.arange(100*100).reshape(100,100) 
b = np.random.rand(100, 100) 

indices = b[slice_] > 0.5 

내가 원하는 경우에 :

나는 다음이 조각의 특정 부분을 선택 부울 인덱스의 집합이 다른 값이 인덱스를 설정 난 쉽게 그것을 할 수 있습니다 :

a[slice_][indices] = 42 

을하지만, 내가 인덱스 배열의 특정 부분을 선택 부울 지수의 또 다른 세트를 만들 경우 : 다음

high_indices = a[slice_][indices] > 700 

시도를 서로 다른 모양이다

a[slice_][indices][high_indices] = 42 # Doesn't do anything! 

나는 어쩌면 생각 나는 데 필요한과 함께 두 개의 인덱스 배열 :하지만 indices 01의 모양을 가지고 있으며, 이러한 인덱스의 배열의 값을 설정및 high_indices(12,)의 형상을 갖는다.

나는 비교적 무언가를하기 위해 여기에 끔찍한 혼란을 느낀다고 생각합니다. 배열의 값을 설정할 수있는 방법으로이 두 부울 배열을 사용하여 인덱스를 만들 수 있습니까?

답변

3

numpy 배열을 분할하면 뷰가 반환되지만 부울 인덱스는 배열 복사본을 반환합니다. 따라서 부울 인덱스가 a[slice_][indices][high_indices] 인 첫 번째 색인을 생성하면 사본이 다시 생기고 값 42는 사본 a이 아닌 사본에 할당됩니다. 부울 인덱스를 연결하여 문제를 해결할 수 있습니다.

a[slice_][(a[slice_] > 700) & (b[slice_] > 0.5)] = 42