Python Array Slice с запятой? - PullRequest
       14

Python Array Slice с запятой?

30 голосов
/ 02 апреля 2012

Мне было интересно, какой смысл использовать запятую при нарезке массивов Python - у меня есть пример, который работает, но мне кажется странной строка

p = 20*numpy.log10(numpy.abs(numpy.fft.rfft(data[:2048, 0])))

Теперь я знаю, чтопри разрезании массива первое число - начало, следующее - конец, а последнее - шаг, но что обозначает запятая после конечного числа?Спасибо.

Ответы [ 3 ]

22 голосов
/ 02 апреля 2012

Он используется для извлечения конкретного столбца из двумерного массива. Обратитесь к первым примерам здесь .

Таким образом, ваш пример извлечет столбец 0 (первый столбец) из первых 2048 строк (от 0 до 2047). Тем не менее, обратите внимание, что этот синтаксис будет работать только для пустых массивов, а не для общих списков Python.

11 голосов
/ 23 июня 2017

Опытным путем - создайте массив, используя numpy

m = np.fromfunction(lambda i, j: (i +1)* 10 + j + 1, (9, 4), dtype=int)

, который присваивает массив, как показано ниже, m

array(
      [[11, 12, 13, 14],
       [21, 22, 23, 24],
       [31, 32, 33, 34],
       [41, 42, 43, 44],
       [51, 52, 53, 54],
       [61, 62, 63, 64],
       [71, 72, 73, 74],
       [81, 82, 83, 84],
       [91, 92, 93, 94]])

Теперь для среза

m[:,0]

давая нам

array([11, 21, 31, 41, 51, 61, 71, 81, 91])

Возможно, я неправильно истолковал ханскую академию (так что берите с зерном соли):

В терминах линейной алгебры m[:,n] принимает nthвектор столбца матрицы m

См. примечание Абхранила о том, как это конкретное толкование применимо только к numpy

10 голосов
/ 02 апреля 2012

Это ломтики с кортежем. Что именно означает кортеж, зависит от нарезаемого объекта. В массивах NumPy он выполняет m-мерный срез для n-мерного массива.

>>> class C(object):
...   def __getitem__(self, val):
...     print val
... 
>>> c = C()
>>> c[1:2,3:4]
(slice(1, 2, None), slice(3, 4, None))
>>> c[5:6,7]
(slice(5, 6, None), 7)
...