2016-08-29 2 views
1

, если у меня есть массив х, значение которого, как следует с формой (2,3,4):Индексирование в последней оси 3D-массив с другим массивом 3D

array([[[ 0.15845319, 0.57808432, 0.05638804, 0.56237656], 
     [ 0.73164208, 0.80562342, 0.64561066, 0.15397456], 
     [ 0.34734043, 0.88063258, 0.4863103 , 0.09881028]], 

     [[ 0.35823078, 0.71260357, 0.49410944, 0.94909165], 
     [ 0.02730397, 0.67890392, 0.74340148, 0.47434223], 
     [ 0.02494292, 0.59827256, 0.20550867, 0.30859339]]]) 

и у меня есть массив индекса у, форма которого является (2, 3, 3), и значение:

array([[[0, 2, 2], 
     [2, 0, 2], 
     [0, 0, 2]], 

     [[1, 2, 1], 
     [1, 1, 1], 
     [1, 2, 2]]]) 

так что я мог бы использовать х [0,0, у [0] [0]] индексировать массив х, и он будет генерировать выходной сигнал следующим образом:

array([ 0.15845319, 0.05638804, 0.05638804]) 

мой вопрос: есть ли простой способ сделай это? я уже пробовал с x [y], он не работал.

+0

написать небольшую функцию для реализации аббревиатуры? – Ronald

+0

Я хочу сделать это простым способом, а не функцией, просто посмотрите на вопрос, который я публикую здесь (http://stackoverflow.com/questions/39118401/slice-operation-for-numpy-in-python2). –

ответ

1

Вы можете использовать fancy-indexing -

m,n = y.shape[:2] 
out = x[np.arange(m)[:,None,None],np.arange(n)[:,None],y] 
+0

Отличный ответ, спасибо Divakar –

Смежные вопросы