2013-04-01 4 views
6

Numpy tentative tutorial предполагает, что a[ : :-1] является обратным a. Может ли кто-нибудь объяснить мне, как мы туда попали?Перевернутый массив в numpy?

Я понимаю, что a[:] означает для каждого элемента a (с осью = 0). Следующее : должно обозначать количество элементов, чтобы пропустить (или период) из моего понимания.

+5

См http://stackoverflow.com/questions/509211/the-python-slice-notation - Это для питона правильной, но NumPy подчиняется все конвенции, как хороший 3 пакет партии. – mgilson

+2

Также см. Http://stackoverflow.com/a/4371049/875127 для правильного объяснения того, как базовая нарезка в numpy возвращает представление, а не копию исходного массива. –

ответ

4

Как уже отмечали другие, это техника нарезки питона, а numpy просто следует за костюмом. Надеюсь, это поможет объяснить, как это работает:

Последний бит - это шаг. 1 указывает на шаг по одному элементу за раз, - делает это в обратном порядке.

Пробелы указывают на первый и последний, если у вас есть отрицательный размер шага, в этом случае они указывают последний и первый:

In [1]: import numpy as np 

In [2]: a = np.arange(5) 

In [3]: a 
Out[3]: array([0, 1, 2, 3, 4]) 

In [4]: a[0:5:1] 
Out[4]: array([0, 1, 2, 3, 4]) 

In [5]: a[0:5:-1] 
Out[5]: array([], dtype=int64) 

In [6]: a[5:0:-1] 
Out[6]: array([4, 3, 2, 1]) 

In [7]: a[::-2] 
Out[7]: array([4, 2, 0]) 

Line 5 дает пустой массив, поскольку он пытается сделать шаг назад от 0 го элемент к 5 th.
Врезка не включает «конечную точку» (названный последним элементом), поэтому линия 6 пропускает 0 при движении назад.

3

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

10

Это не numpy, это Python.

В Python, есть кусочки для последовательности/итератора, которые приходят в следующий синтаксис

seq[start:stop:step] => a slice from start to stop, stepping step each time. 

Все аргументы не являются обязательными, но : должен быть там для Python, чтобы признать это как срез.

Отрицательные значения для шага, а также работать, чтобы сделать копию той же последовательности/итератора в обратном порядке:

>>> L = range(10) 
>>> L[::-1] 
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

И NumPy следует, что «правило», как любой хороший 3-сторонней библиотеки ..

>>> a = numpy.array(range(10)) 
>>> a[::-1] 
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0]) 

См this link

Смежные вопросы