小编典典

Ellipsis 对象有什么作用?

all

在闲逛命名空间时,我注意到一个看起来很奇怪的对象,称为Ellipsis,它似乎并没有什么特别之处,也没有做任何特别的事情,但它是一个全局可用的内置函数。

经过搜索,我发现它被 Numpy 和 Scipy 用于切片语法的一些晦涩变体中......但几乎没有别的。

是否将此对象添加到语言中专门用于支持 Numpy + Scipy?省略号有任何通用含义或用途吗?

D:\workspace\numpy>python
Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> Ellipsis
Ellipsis

阅读 124

收藏
2022-03-02

共1个答案

小编典典

这在最近的另一个问题中出现。我将从那里详细说明我的答案:

省略号是可以以切片表示法出现的对象。例如:

myList[1:2, ..., 0]

它的解释完全取决于实现__getitem__函数并Ellipsis在那里看到对象的任何东西,但它的主要(和预期)用途是在numpy第三方库中,它添加了多维数组类型。由于有不止一个维度,切片变得比仅仅一个开始和停止索引更复杂;能够在多个维度上切片也很有用。例如,给定一个
4x4 数组,左上角区域将由 slice 定义[:2,:2]

>>> a
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12],
       [13, 14, 15, 16]])

>>> a[:2,:2]  # top left
array([[1, 2],
       [5, 6]])

进一步扩展这一点,省略号在这里用于指示未指定的其余数组维度的占位符。可以将其视为指示[:]其放置的间隙中所有维度的完整切片,因此对于 3d 数组,与
4da[...,0]相同a[:,:,0],对于
4d,a[:,:,:,0]同样,a[0,...,0]a[0,:,:,0](但中间有许多冒号构成完整数字数组中的维数)。

有趣的是,在 python3 中,省略号文字 ( ...) 可在切片语法之外使用,因此您实际上可以编写:

>>> ...
Ellipsis

除了各种数字类型,不,我不认为它被使用。据我所知,它纯粹是为 numpy
使用而添加的,除了提供对象和相应的语法之外没有任何核心支持。那里的对象不需要这个,但是对切片的文字“…”支持确实如此。

2022-03-02