2016-06-22 2 views
2

Я новичок в python и numpy. Предположим, у меня есть массив A = np.random.rand(10,100), как легко получить доступ к некоторым его столбцам?Доступ к нескольким столбцам в массиве в Python

В Matlab Я бы написал что-то вроде B = A(:,[2,4,6:10,50:80]). Что эквивалентно этой строке кода в Python?

Я рассмотрел примеры в http://scipy.github.io/old-wiki/pages/NumPy_for_Matlab_Users.html, но ни один из них не ответил на мой вопрос.

+2

См. Http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html и 'numpy.r _ []' – Benjamin

+0

Ну, одним из способов было бы использовать диапазон для имитации операции двоеточия и затем просто индексируйте в cols: 'A [:, np.hstack ((2,4, диапазон (6,10 + 1), диапазон (50,80 + 1)))]. – Divakar

+0

'@ Divakar' Я тоже так пробовал, но я полагал, что должен быть какой-то метод проще, чем он :) – Chris

ответ

2

Как Benjamin предположил, np.r_ обрабатывает выражение, как это красиво

In [1329]: np.r_[2,4,6:10,50:80] 
Out[1329]: 
array([ 2, 4, 6, 7, 8, 9, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 
     61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 
     78, 79]) 

, которые могут быть использованы в качестве:

B = A[:, np.r_[2,4,6:10,50:80]] 

r_ расширяет ломтики в диапазоны и сцепляет все вместе, как в Divakar's комментарии ,

+0

Ах не знал, что двоеточие может использоваться в' np.r _ [] ', приятно! – Divakar

+1

В 'r_' (и' c_') больше функций, чем требуется большинству из нас. Мне никогда не приходилось использовать первую строку аргументов. Шаг 'j' - всего лишь симпатичный способ использования' linspace' вместо 'arange'. Если функции полезны, отлично. Но если вы их не понимаете, не беспокойтесь. – hpaulj

+0

Это именно то, что я ищу. Я считаю, что ссылка «Бенджамин» обеспечивает хорошую базу знаний. На данный момент это кажется мне подавляющим. Я все еще пытаюсь понять 'r _ []' и 'c _ []' – Chris