2012-02-17 2 views
0

Я хочу взять некоторые индексы из элементов numpy.array. Это то, что я получил до сих пор:Можно ли использовать numpy.take для выбора списка индексов?

import numpy as np 

a = np.array(range(20)) 
a.shape=4,5 
#~ [[ 0 1 2 3 4] 
#~ [ 5 6 7 8 9] 
#~ [10 11 12 13 14] 
#~ [15 16 17 18 19]] 

idxs = np.array([(4,0),(3,1),(2,1),(0,3)]) 
ret = a.take(idxs,1).diagonal().transpose() 
print ret 

#~ [[ 4. 0.] 
#~ [ 8. 6.] 
#~ [ 12. 11.] 
#~ [ 15. 18.]] 

ли можно получить этот результат в более простом (или более быстрый) способ?

+0

Вашего 'idxs' будет работать на транспонированной' a' только. Нет 'a [4,0]'. – eumiro

+0

Я так себя не объяснил, извините. (4,0), которое вы видите, означает взять элемент 4 и элемент 0 из первой строки. Затем возьмите элементы 3 и 1 из второй строки и т. Д. Результат, который я показываю, верен, меня не удовлетворяет метод. – rapto

+0

Также как общее замечание, чтобы создать 'a', вы должны использовать что-то вроде' a = np.arange (20) .reshape ((4,5)) ' – JoshAdel

ответ

3

вы можете создать массив для оси 0 индекса:

a[np.arange(4)[:,None], idxs] 
Смежные вопросы