{num}中的`slice`(:)和`ellipsis`(...)运算符有什么区别?

时间:2020-08-08 10:00:54

标签: python-3.x numpy numpy-ndarray

我遇到了一个代码,其中作者使用ellipsis数组使用numpy运算符(例如[...,1]),而不是slice运算符(例如, [:,1])获取数组部分。

我对这个问题的研究

  1. scipy github wiki page中,我了解到两个运算符都执行一些类似的操作,即返回多维数组的切片。

  2. 我已经遍历了this question,它处理了numpy数组的几种切片技术,但是没有找到关于何时使用slice的详细说明运算符,以及何时需要使用ellipsis或它们的功能是否相同。

  3. Example 1中,我找不到这两个运算符之间的任何区别:

示例1:

    import numpy as np

    A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
    A[..., 0], A[:, 0]    # Out: (array([1, 4, 7]), array([1, 4, 7]))
    A[..., 0] == A[:, 0]  # Out: array([ True,  True,  True])

所以我的问题是:

  • sliceellipsis运算符与numpy.ndarrays一起使用有什么区别?
  • 它们可以互换使用吗?
  • 使用一个或另一个有什么优势吗?

非常感谢您对我的问题进行详尽的阐述,并在此先感谢您的宝贵时间。

1 个答案:

答案 0 :(得分:2)

两者的动机完全不同。

  • 省略号的意思是“所有其他所有维度(我可以不费力地列举,不确定或不在乎有多少个)”

  • slice的意思是“由起始索引和结束索引(和跨度)指定的当前维度的子集”