2013-05-07 3 views
1

Как я могу сделать индексацию столбца 2D-массива мудрым. Например,Pinton indexing 2D array

array([[ 0, 1, 2, 3, 4], 
    [ 5, 6, 7, 8, 9], 
    [10, 11, 12, 13, 14], 
    [15, 16, 17, 18, 19], 
    [20, 21, 22, 23, 24], 
    [25, 26, 27, 28, 29], 
    [30, 31, 32, 33, 34], 
    [35, 36, 37, 38, 39], 
    [40, 41, 42, 43, 44], 
    [45, 46, 47, 48, 49]]) 

Это 2D-массив. Я могу получить доступ к этому столбцу, используя a[:,0], который даст мне первый столбец. Но если я хочу, чтобы прочитать все колонки в то время, и вы хотите, чтобы выбрать значения, например

[5] 

[10][15] 

[20][25][37] 

, то он должен выбрать значения, как

20 

45, 21 

46,22, 33 

Я знаю, что это должно быть легко. Но я изучаю материал.

ответ

2

Если вы хотите [5] дать 20, вы должны начинать считать с 1. Поскольку Python начинает отсчет с 0, это привычка к перерыву сейчас: это вызовет только головные боли.

Я не уверен, что формат вывода вы хотите, потому что NumPy не поддерживает неровные массивы, но, возможно,

>>> idx = np.array([5, 10, 15, 20, 25, 37]) 
>>> a.T.flat[idx-1] 
array([20, 45, 21, 46, 22, 33]) 

хватило бы? Здесь мне пришлось взять транспонирование, просмотреть его как плоский массив, а затем вычесть 1 из индексов, чтобы они соответствовали тому, как вы, кажется, считаете.

Мы можем использовать список вместо массива (но тогда мы должны были бы сделать listcomp или что-то вычитать 1s). Например:

>>> a.T.flat[[4, 9, 14, 19, 24, 36]] 
array([20, 45, 21, 46, 22, 33]) 
+0

Спасибо за ваш ответ. транспозиция, плоский массив - это что-то новое для меня, поскольку я все еще изучаю. Я постараюсь их хорошо понять. – haq

+1

Просто, чтобы быть ясным, 'flat' - это не представление, а итератор (хотя и тот, который поддерживает фантастическую индексацию). Вы можете вернуть подлинный вид, используя 'ravel()', если вы хотите играть с самим массивом как 1D-объект без создания копий (или, в более общем плане, 'reshape()'). –

+0

@HenryGomersall: О, я даже не думал об этом. Я просто имел в виду «мнение» как «думать об этом как»/«относиться к нему как к», что является неудачным выбором слов, учитывая, что «вид» имеет технический смысл в многоуровневом контексте. – DSM