Python numpy三维切片、索引和省略号是如何工作的?

Python numpy三维切片、索引和省略号是如何工作的?,python,arrays,numpy,Python,Arrays,Numpy,我很难理解numpy的一些切片和索引是如何工作的 第一个是: 据报道, 如果选择元组中的对象数小于N,则 :假定用于任何后续尺寸 那么这是否意味着[[1]、[2]、[3]、[[4]、[5]、[6]]本身就是一个2x3数组 你是怎么做到的 x[1:2] 返回 array([[[4], [5], [6]]]) ? 二是省略, 省略号展开为:进行选择所需的对象数 与x.ndim长度相同的元组。可能只有一个 省略号出现 为什么[…,0]意味着什么 对于第一个问题,这意

我很难理解numpy的一些切片和索引是如何工作的

第一个是:

据报道,

如果选择元组中的对象数小于N,则 :假定用于任何后续尺寸

那么这是否意味着[[1]、[2]、[3]、[[4]、[5]、[6]]本身就是一个2x3数组

你是怎么做到的

x[1:2]
返回

array([[[4],
        [5],
        [6]]])
?

二是省略,

省略号展开为:进行选择所需的对象数 与x.ndim长度相同的元组。可能只有一个 省略号出现


为什么[…,0]意味着什么

对于第一个问题,这意味着形状为2,3,1的x有两个3x1阵列的切片

这就是为什么你只得到第一片

关于你的第二个问题

In [45]: x.ndim
Out[45]: 3
所以,当您使用省略号时,它只是将数组延伸到大小3

In [47]: x[...,0]
Out[47]: 
array([[1, 2, 3],
       [4, 5, 6]])
上面的代码意味着,从数组x中获取两个切片,并按行拉伸它

但是如果你这样做了

In [49]: x[0, ..., 0]
Out[49]: array([1, 2, 3])

在这里,您只需从x中取出第一个切片并按行拉伸即可。

现在,当您执行x[1:2]时,它只会将第一个切片交给您

我的问题是它不应该是第二片吗。因为输出是片2

In [42]: x[1:2]
Out[42]: 
array([[[4],
        [5],
        [6]]])

非常感谢你的解释,它真的很有帮助
In [45]: x.ndim
Out[45]: 3
In [47]: x[...,0]
Out[47]: 
array([[1, 2, 3],
       [4, 5, 6]])
In [49]: x[0, ..., 0]
Out[49]: array([1, 2, 3])
In [42]: x[1:2]
Out[42]: 
array([[[4],
        [5],
        [6]]])