numpy индекс нарезки массива - PullRequest
0 голосов
/ 29 января 2020
import numpy as np
a=np.array([ [1,2,3],[4,5,6],[7,8,9]])
  • Как получить столбец нулевого индекса? Ожидаемый вывод [[1],[2],[3]] a[...,0] дает одномерный массив. Может быть, следующий вопрос отвечает на этот вопрос.

  • Как получить последние 2 столбца a? a[...,1:2] дает только второй столбец, a[...,2:3] дает последние 2 столбца, но a[...,3] является недопустимым измерением. Итак, как это работает?

Кстати, операторы ... и : имеют одинаковое значение? a[...,0] и a[:,0] дают одинаковый вывод. Кто-нибудь может прокомментировать здесь?

Ответы [ 2 ]

1 голос
/ 29 января 2020

numpy индексирование построено на python соглашениях по списку, но распространяется на многомерное и многоэлементное индексирование. Это мощная, но сложная система, но рано или поздно вам следует прочитать полную документацию indexing, в которой проводится различие между «базовым c» и «расширенным» индексированием.

Как и range и arange, индекс среза имеет значение остановки «open»

In [111]: a = np.arange(1,10).reshape(3,3)                                                       
In [112]: a                                                                                      
Out[112]: 
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

Индексирование с помощью скаляра уменьшает размер независимо от того, где:

In [113]: a[1,:]                                                                                 
Out[113]: array([4, 5, 6])
In [114]: a[:,1]                                                                                 
Out[114]: array([2, 5, 8])

Это также означает, что a[1,1] возвращает 5, а не np.array([[5]]).

Индексирование с помощью среза сохраняет размерность:

In [115]: a[1:2,:]                                                                               
Out[115]: array([[4, 5, 6]])

, так же как и индексирование со списком или массивом (хотя это делает copy, а не view):

In [116]: a[[1],:]                                                                               
Out[116]: array([[4, 5, 6]])

... является обобщенным : - используйте столько, сколько необходимо.

In [117]: a[...,[1]]                                                                             
Out[117]: 
array([[2],
       [5],
       [8]])

Размеры можно настроить с помощью newaxis или изменить:

In [118]: a[:,1,np.newaxis]                                                                      
Out[118]: 
array([[2],
       [5],
       [8]])

Обратите внимание, что трейлинг : является автоматическим c. a[1] совпадает с a[1,:]. Но ведущие должны быть явными.

Индексирование списка также удаляет «слой измерений / вложенности»

In [119]: alist = [[1,2,3],[4,5,6]]                                                              
In [120]: alist[0]                                                                               
Out[120]: [1, 2, 3]
In [121]: alist[0][0]                                                                            
Out[121]: 1
In [122]: [l[0] for l in alist]     # a column equivalent                                                                  
Out[122]: [1, 4]
0 голосов
/ 29 января 2020
import numpy as np
a=np.array([ [1,2,3],[4,5,6],[7,8,9]])

a[:,0] # first colomn
>>> array([1, 4, 7]) 
a[0,:] # first row
>>> array([1, 2, 3])
a[:,0:2] # first two columns
>>> array([[1, 2],
       [4, 5],
       [7, 8]])
a[0:2,:] # first two rows
>>> array([[1, 2, 3],
       [4, 5, 6]])
...