2016-08-12 3 views
2

나는 선택에 질적 인 문제가 있습니다. 배열 b에서 배열 A에있는 특정 인덱스를 선택하고 싶습니다.Numpy가 모양 불일치를 선택하십시오

a 
Out[54]: 
array([[3, 2, 2], 
     [0, 0, 2]], dtype=int64) 

b 
Out[55]: 
array([[[ 6., 1., 8., 9., 3., 8., 5.], 
     [ 6., 1., 5., 8., 2., 2., 10.], 
     [ 6., 1., 1., 0., 9., 3., 6.]], 

     [[ 11., 3., 8., 9., 3., 8., 5.], 
     [ 12., 7., 5., 8., 2., 2., 10.], 
     [ 8., 9., 1., 0., 9., 3., 6.]]]) 

np.choose(a,b) 
ValueError: shape mismatch: objects cannot be broadcast to a single shap 

numpy의 설명서에는 선택 배열이 있습니다. a와 모든 선택 사항은 동일한 모양으로 방송 가능해야합니다. 선택 항목 자체가 배열 인 경우 (권장되지 않음) 가장 바깥 쪽 치수 (즉, choices.shape [0]에 해당하는 항목)가 "시퀀스"를 정의하는 것으로 간주됩니다.

ndarray에서 선택하는 것은 좋지 않지만 어쨌든이 작업을 수행하려면 우아한 numpy 방법이 있습니까? 모든 제안을 부탁드립니다.

예상 출력은 다음과 같습니다 것 같습니다

[[9,5,1], [11,12,1]] 
+0

'b'의 2 차원이 2 인 것처럼 보이지만 'a'의 값은 3까지 올라갑니다. 선택 작업에서 무엇을 기대합니까? – Ajean

+0

예상 출력은 [[9,5,1], [11,12,1]] – Nickpick

답변

2

당신이 b에 길이 7의 차원에서 값을 선택 choose를 사용하려면 ((크기하는 2,3,7)). 선택한 배열 배열 a은 시퀀스 차원이 가장 바깥 쪽 차원 인 경우에만 사용할 수 있습니다 (인용 한 것처럼). Numpy의 가장 바깥 쪽 치수는 이며 처음에는입니다. 그러면 수행해야 할 작업은 롤 b이므로 차원 (7,2,3)이됩니다.

np.choose(a, np.rollaxis(b, 2, 0)) 
+0

Numpy의 가장 바깥 쪽 치수가 첫 번째 치수 – Nickpick

관련 문제