Получение только отдельных столбцов в каждой строке в массиве 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?
Ответы
Ответ 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]
>>>