Как вы используете синтаксис разрезания многоточия в Python?
Это появилось в скрытых функциях Python, но я не вижу хорошей документации или примеров, объясняющих, как работает эта функция.
Ответы
Ответ 1
Вы использовали бы его в своем собственном классе, так как никакой встроенный класс не использует его.
Numpy использует его, как указано в документации. Некоторые примеры здесь.
В своем классе вы будете использовать его следующим образом:
>>> class TestEllipsis(object):
... def __getitem__(self, item):
... if item is Ellipsis:
... return "Returning all items"
... else:
... return "return %r items" % item
...
>>> x = TestEllipsis()
>>> print x[2]
return 2 items
>>> print x[...]
Returning all items
Конечно, есть документация python, а ссылка на язык. Но это не очень полезно.
Ответ 2
Эллипсис используется для срезания высокоразмерных структур данных.
Он предназначен для обозначения на этом этапе вставки как можно большего количества полных фрагментов (:
) для расширения многомерного фрагмента ко всем измерениям.
Пример:
>>> from numpy import arange
>>> a = arange(16).reshape(2,2,2,2)
Теперь у вас есть 4-мерная матрица порядка 2x2x2x2. Чтобы выбрать все первые элементы в 4-м измерении, вы можете использовать нотацию с многоточием
>>> a[..., 0].flatten()
array([ 0, 2, 4, 6, 8, 10, 12, 14])
что эквивалентно
>>> a[:,:,:,0].flatten()
array([ 0, 2, 4, 6, 8, 10, 12, 14])
В ваших собственных реализациях вы можете игнорировать упомянутый выше контракт и использовать его для всех, что сочтете нужным.
Ответ 3
Это еще одно использование для Ellipsis, которое не имеет ничего общего с срезами: я часто использую его во внутрипоточной связи с очередями, как знак, который сигнализирует "Done"; это там, это объект, это одноэлемент, а его имя означает "недостаток", и это не чрезмерное Нет (которое может быть помещено в очередь как часть нормального потока данных). YMMV.
Ответ 4
Как указано в других ответах, его можно использовать для создания срезов. Полезно, если вы не хотите, чтобы написать много полных ломтиками нотации (:
), или когда вы просто не уверены в том, что размерность массива манипулируют.
То, что я считал важным выделить, и которое отсутствовало в других ответах, заключается в том, что его можно использовать, даже если больше не нужно заполнять размеры.
Пример:
>>> from numpy import arange
>>> a = arange(4).reshape(2,2)
Это приведет к ошибке:
>>> a[:,0,:]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: too many indices for array
Это будет работать:
a[...,0,:]
array([0, 1])
Ответ 5
Документация Python не очень понятна, но есть и другое использование многоточия. Он используется как представление бесконечных структур данных в случае Python. Этот вопрос обсуждает как и некоторые актуальные приложения.