2014-01-25 9 views
6

정수 인덱싱을 사용하지 못하고 도움이 될 수 있다고 확신합니다. I는 2D 배열 생성라고 :numpy 배열 둘 이상의 차원에서 정수 인덱싱

>>> import numpy as np 
>>> x=np.array(range(24)).reshape((4,6)) 
>>> x 
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]]) 

를 I 수 다음으로 선택 행 1 및 2 :

>>> x[[1,2],1] 
array([ 7, 13]) 

:와

>>> x[[1,2],:] 
array([[ 6, 7, 8, 9, 10, 11], 
     [12, 13, 14, 15, 16, 17]]) 

또는 행 2 열 1, 3 그래서 다음과 같이 행 1과 2의 3, 4, 5 열을 선택할 수 있습니다.

>>> x[[1,2],[3,4,5]] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: shape mismatch: objects cannot be broadcast to a single shape 

그리고 대신에 나는 두 단계를 수행해야합니다 R에서 오는

>>> a=x[[1,2],:] 
>>> a 
array([[ 6, 7, 8, 9, 10, 11], 
     [12, 13, 14, 15, 16, 17]]) 
>>> a[:,[3,4,5]] 
array([[ 9, 10, 11], 
     [15, 16, 17]]) 

, 내 기대가 잘못된 것 같다. 이것이 실제로 한 단계에서 가능하지 않다는 것을 확인하거나 더 나은 대안을 제안 할 수 있습니까? 감사!

편집 : 예에서 행과 열의 선택은 연속적이지만, 반드시 선택하지 않아도됩니다. 즉, 슬라이스 인덱싱이 내 경우에는 수행되지 않습니다. 이 같은

답변

3

당신은 또한 내가 일반적으로 데이터의 중간 복사본을 생성하는, 두 번이 아니라 색인보다, 어떻게 할 것인지 인 인덱싱 배열 중 방송을 사용할 수도 있습니다 :

>>> x[[[1], [2]],[[3, 4, 5]]] 
array([[ 9, 10, 11], 
     [15, 16, 17]]) 

은 지수의 큰 숫자를 처리하기 위해 진행하는 방법과 무엇보다 조금 보려면 :

>>> row_idx = np.array([1, 2]) 
>>> col_idx = np.array([3, 4, 5]) 
>>> x[row_idx.reshape(-1, 1), col_idx] 
array([[ 9, 10, 11], 
     [15, 16, 17]]) 
+0

바로 그 중간 복사본이 실제로 나를 괴롭혔습니다. 많은 것들! – Miquel

+0

nice; 나는 이것을 알지 못했다! –

+1

나는 괄호 속에서 빠져 나간다 ... –

2

뭔가 :

In [28]: x[1:3, 3:6]                    
Out[28]: 
array([[ 9, 10, 11], 
     [15, 16, 17]]) 
+0

감사! 슬라이스가 아닌 인덱스 배열로 인덱싱해야합니다. 즉, 행과 열이 연속적이지 않을 수도 있고 odred 일 수도 있습니다. – Miquel

+1

@Miquel 다차원 배열에서 인덱싱을 할 수 있다고 생각하지 않습니다. 읽기 : http://docs.scipy.org/doc/numpy/user/basics.indexing.html#indexing-multi-dimensional-arrays –

관련 문제