Подтвердить что ты не робот

Получение только отдельных столбцов в каждой строке в массиве numpy

Возможный дубликат:
numpy: доступ к массиву по столбцу

У меня есть массив numpy (numpy импортируется как np)

gona = np.array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])

Я могу получить значения целого столбца 1-й строки по gona [1] [:].

массив ([4, 5, 6])

Но если я попытаюсь получить все значения определенного столбца всех строк (например, я хочу значения 1-го столбца в каждой строке), я бы попробовал gona [:] [1]. Но результат, который я получаю от этого, тот же, что и раньше.

Что может быть причиной этого? Как это сделать в numpy?

4b9b3361

Ответ 1

Вы действительно хотите это сделать:

>>> a
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])
>>> a[:,1]
array([ 2,  5,  8, 11])

a[:] просто возвращает весь массив, поэтому a[:][1] возвращает вторую строку a. Я думаю, что там, где возникает ваша путаница.

Смотрите этот раздел ориентировочное учебное пособие по Numpy для больше информации об индексировании многомерных массивов.

Ответ 2

Кажется, есть небольшая путаница с точки зрения позиционирования фигурных скобок, gona[:][1] сначала выбирает все из массива, а из этого массива выбирает вторую строку. Чтобы выделить определенные столбцы, вы помещаете индексы в те же квадратные скобки, разделенные запятой:

gona = np.array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])

gona[1,:]
Out[21]: array([4, 5, 6])

gona[:,1]
Out[22]: array([ 2,  5,  8, 11])

gona[:,0]
Out[23]: array([ 1,  4,  7, 10])

вы также можете просто выбрать диапазон строк, например

gona[0:2,0] # only take the two first rows of the first column
Out[24]: array([2, 5])

Ответ 3

Вот так:

gona = numpy.array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])

# List comprehension, just get each element in 'gona', and then get first element in that list
out = [x[0] for x in gona]

print out

Вывод:

>>> 
[1, 4, 7, 10]
>>>