2014-10-02 9 views
1

일부 인덱스 및 행 인덱스에 따라 서브 매트릭스를 선택하려고합니다.numpy는 인덱스에 따라 서브 매트릭스를 선택합니다.

이상한 오류가 발생합니다. 나는 칼럼 인덱스에 대한 행 인덱스에 따라 행렬을 슬라이스 할 수 있지만 동시에 둘 다를 따르지는 못한다.

어떻게 해결할 수 있습니까?

>>> X.shape 
(1000, 30) 
>>> type(X) 
<class 'numpy.ndarray'> 
>>> X 
array([[ 0.06349252, -0.19222932, -0.51720414, ..., 0.17566853, 
     0.15821072, 0.0478738 ], 
     [ 0.88497758, 0.22215627, 1.63248497, ..., 0.77716638, 
     0.76535743, 0.11670681], 
     [ 0.13308973, -0.12106689, -0.51353645, ..., 1.32546684, 
     0.8276816 , 1.25001549], 
     ..., 
     [-0.25907157, -0.24458445, -0.87298188, ..., 0.6467455 , 
     0.43216921, 0.57972136], 
     [ 1.23272918, 0.14475037, 0.16869452, ..., 0.27710557, 
     -1.39863587, -0.10482702], 
     [-0.57754589, 0.77061869, 1.88473625, ..., 0.31680682, 
     1.64699058, 0.92152533]]) 
>>> j = np.random.choice(10, 5) 
>>> i = np.random.choice(10,1000) 
>>> X[i, :] 
array([[-0.90775982, 0.82286474, -0.94136182, ..., 1.11494763, 
     0.04252439, 1.08999938], 
     [-2.51998203, -0.47154878, -0.88228892, ..., -0.03526119, 
     0.40444398, 0.27545503], 
     [-0.90775982, 0.82286474, -0.94136182, ..., 1.11494763, 
     0.04252439, 1.08999938], 
     ..., 
     [ 0.29236619, -1.53595325, 0.77567467, ..., 0.45090184, 
     1.49180382, 1.04571078], 
     [ 0.13308973, -0.12106689, -0.51353645, ..., 1.32546684, 
     0.8276816 , 1.25001549], 
     [ 0.57790133, -1.11712824, -0.47716697, ..., 0.27169274, 
     -0.84223531, -0.99293644]]) 
>>> X[:, j] 
array([[-0.51720414, 0.60436212, 0.54243319, 0.06349252, -0.19222932], 
     [ 1.63248497, -0.75034999, -0.41102324, 0.88497758, 0.22215627], 
     [-0.51353645, 0.74373642, -0.76499708, 0.13308973, -0.12106689], 
     ..., 
     [-0.87298188, -0.14638175, 0.0278893 , -0.25907157, -0.24458445], 
     [ 0.16869452, -0.42747292, 0.49202016, 1.23272918, 0.14475037], 
     [ 1.88473625, -0.21566782, -0.52799588, -0.57754589, 0.77061869]]) 
>>> X[i, j] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: shape mismatch: objects cannot be broadcast to a single shape 
>>> 
+0

다음과 같은 슬라이스를 사용할 수 있습니다 :'a [i1 : i2, j1 : j2]'... –

+0

@SaulloCastro 그래서 기본적으로 numpy는 두 차원의 색인 생성을 지원하지 않습니까? – Donbeo

답변

2

나는 별도로 인덱스를해야합니다 생각 :

X[i, :][:, j] 

문제는 NumPy와는 j에 해당 열 인덱스와 i의 각 행의 인덱스를 일치 시키려고한다는 것입니다,하지만 그들은하지 않습니다 같은 길이.

예를 들어 X[(1, 2), (3, 4)]X[1, 3]X[2, 4]을 선택하지만 X[(1, 2), (3, 4, 5)]은 일치하지 않습니다.

+0

성능에 미치는 영향이 있습니까? – Donbeo

+0

@Donbeo 아마 사소한 영향력이 있습니다. [이 방법] (http://stackoverflow.com/a/22927889/645956)이 빠를 수도 있습니다. – grc

관련 문제