Это пришло в скрытых функциях Python , но я не вижу хорошей документации или примеров, объясняющих, как работает эта функция.
157
Ellipsis
, или ...
это не скрытая функция, это просто константа. Это совсем не то, что, скажем, javascript ES6, где он является частью синтаксиса языка. Ни один встроенный класс или языковая структура Python не используют его.
Таким образом, синтаксис этого полностью зависит от вас, или кто-то еще, написав код, чтобы понять это.
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
Конечно, есть документация по питону и языковая справка . Но это не очень полезно.
Многоточие используется для нарезки многомерных структур данных.
На данный момент
:
он предназначен для вставки как можно большего количества полных срезов ( ), чтобы расширить многомерный срез до всех измерений .Пример :
Теперь у вас есть 4-мерная матрица порядка 2x2x2x2. Чтобы выбрать все первые элементы в 4-м измерении, вы можете использовать многоточие
что эквивалентно
В ваших собственных реализациях вы можете свободно игнорировать контракт, упомянутый выше, и использовать его по своему усмотрению.
источник
a[:,:,:,0]
не вернет копию иa[...,0]
вернет «представление», а не копию? Я попытался запуститьid()
обе версии и массив 3-dim: уa[:,:,:, 0], a[:,:,:, 1], a[:,:,:, 2]
всех разные идентификаторы, тогда как уa[..., 0], a[..., 1], a[..., 2]
всех одинаковые идентификаторы.id()
возвращает одинаковое значение для обоих. Также проверка с__array_interface__['data']
показывает тот же адрес памяти.a[indexes, ...]
то время как даже одномерный массив!Это еще одно использование Ellipsis, которое не имеет ничего общего со срезами: я часто использую его для связи между потоками внутри потока, как знак, обозначающий «Готово»; это там, это объект, это одиночный объект, и его имя означает «отсутствие», и это не чрезмерное None (которое может быть помещено в очередь как часть обычного потока данных). YMMV.
источник
Как указано в других ответах, его можно использовать для создания слайсов. Полезно, когда вы не хотите писать много нотаций с полными срезами (
:
), или когда вы просто не уверены, какова размерность манипулируемого массива.То, что я считал важным выделить, и чего не хватало в других ответах, это то, что его можно использовать даже тогда, когда нет больше измерений, которые необходимо заполнить.
Пример:
Это приведет к ошибке:
Это будет работать:
источник