2014-04-19 1 views
2

numpy 배열의 특정 조각을 꺼내려고하지만 인덱스 튜플로 표현하는 방법을 모르겠습니다.부분 인덱스를 사용하는 너비 배열 인덱싱

ind = (1,2,3) 

# these two values are the same 
foo[1,2,3] 
foo[ind] 

하지만 하나 개의 차원을 따라 조각을 얻으려면 같은 표기가 작동하지 않습니다 :

ind = (2,3) 

# these two values are not the same 
foo[:,2,3] 
foo[:,ind] 

# and this isn't even proper syntax 
foo[:,*ind] 
길이 치수의 수와 같은 경우 인덱스의 튜플 작동 사용

슬라이스와 함께 인덱스의 명명 된 튜플을 사용하는 방법이 있습니까?

답변

3

대신 : 구문을 사용하는 명시 적으로 slice 객체를 생성 할 수 있으며 튜플이 추가 : foo[:, ind]을 사용하는 반면

ind = (2, 3) 
s = slice(None) # equivalent to ':' 
foo[(s,) + ind] # add s to tuples 

는, 이것의 결과는 foo[:,2,3]와 동일해야합니다 .

0

2D 배열에 액세스하는 경우 ... 나는 당신이 제안해야하는 것이 효과가 있다고 믿습니다. I 열 인덱스 0과 3 차원 어레이에 액세스하기위한 2

import numpy as np 
foo = np.array([[1,2,3],[4,5,6],[7,8,9]]) 

ind = (0,2) 
foo[:,ind] 

를 사용하여 0부터 NumPy와 배열 인덱스 그래서 다음의 행렬에서 첫 번째 및 세 번째 열의 당겨 것을 염두 ... 3D NumPy와 배열 액세스 "i"는 제 1 행렬 슬라이스를 나타내는 3 값 x [i, j, k] 또는

[[ 0, 1, 2], 
[ 3, 4, 5], 
[ 6, 7, 8]] 

에 의해 아래의 예가된다. "j"는 두 번째 행렬 슬라이스 또는이 행의 행을 나타냅니다. 그리고 "k"는 열을 나타냅니다. i, j 및 k는 :, 정수 또는 튜플 일 수 있습니다. 따라서 다음과 같이 명명 된 튜플의 두 세트를 사용하여 특정 슬라이스에 액세스 할 수 있습니다.

import numpy as np 
foo2 = np.array([[[ 0, 1, 2], 
       [ 3, 4, 5], 
       [ 6, 7, 8]], 

       [[ 9, 10, 11], 
       [12, 13, 14], 
       [15, 16, 17]], 

       [[18, 19, 20], 
       [21, 22, 23], 
       [24, 25, 26]]]) 

ind1 = (1,2) 
ind2 = (0,1) 

foo2[:,ind1,ind2] 
+0

첫 번째와 세 번째 열을 가져 오지만 그 것은 내가하려고하는 것이 아닙니다. 3D 배열이있는 경우 특정 행과 '튜브'에서 단일 열을 얻으려고합니다 (또는 배열을 따라 세 번째 방향을 호출 할 것입니다) –