2012-05-03 3 views
1

아래의 배열을 2 열과 3 열, 2 열과 마지막 열 사이의 열 이외에 첫 번째 열을 조각 내기 위해 노력하고 있지만 시도한 모든 조각이 작동하지 않는 것 같습니다. 예를 들어, 아래의 첫 번째 print 문은 대괄호 안의 : 때문에 오류가 발생합니다. 배열을 연결하기 위해 노력했지만 또한이 문제를 해결하는 가장 효율적인 방법이라고 생각하지 않습니다.Numpy Advanced Slicing

import numpy as np 
y = np.arange(35).reshape(5, 7) 

# My ultimate goal is to do a slice similar to this expression, but this of course gives 
# an error. 
print y[[1, 2], [0, 2:-1]] 

# This works, but I feel it is inefficient, although I could be wrong. 
print np.hstack((y[[1, 2], 0][:, np.newaxis], y[[1, 2], 2:-1])) 

모든 의견을 크게 기뻐할 것입니다.

답변

2

이 당신을 요구하지만, 시도하는지 경우 나도 몰라

In [11]: y[2:4,[1,3,4,5,6]] 
Out[11]: 
array([[15, 17, 18, 19, 20], 
     [22, 24, 25, 26, 27]]) 

In [12]: 

NumPy와는 표준 파이썬 목록 유사 슬라이스하지만 치수는 약간의 trickiness를 추가하지만 난 여전히이 해결책을 찾을 수 있습니다 중첩 또는 반복 모양 바꾸기와 비교할 때 정말 우아하지만 때로는 이것이 항상 끝이 아닌 해결책입니다.

편집 :

그것은 잘 보이지 않지만 그것이 모양 변경 또는 거대한 매트릭스보다 더 낫다는,이 배열을 바꿀 또는 초과 요소를 반복 할 필요없이 y[1:3, [0, 2:-1]] 말과 동일을

변경 해당 차원에서 나머지 열의 목록을 [0] +으로 작성하여 원하는 색인을 지정하십시오.

In [33]: y[1:3, [0] + list(xrange(2,y.shape[1]))] 
Out[33]: 
array([[ 7, 9, 10, 11, 12, 13], 
     [14, 16, 17, 18, 19, 20]]) 
+0

미안하지만 충분히 구체적이지 않았습니다. 그 이유는 필자가 열 2 : -1을 필요로하기 때문에 중간에 더 많은 열을 가질 수 있지만 배열의 시작이나 끝에서는 결코 열을 가지지 않기 때문입니다. – hotshotiguana

+0

'y [2 : 4,1 : -1]'을 실행하면 행 2,3과 모든 'inside'열이 생깁니다. – lukecampbell

+0

'inside'열 외에 첫 번째 열이 필요하므로 원래 질문을 편집했습니다. – hotshotiguana