一句话总结: …代替了切片操作中前面所有的:, 即a[:, :, None] 和a[…, None]等价

    这里主要涉及python和numpy的切片操作。

    下面以二维切片为例:

    import numpy as np
    a = np.arange(25).reshape((5, 5))
    print(a)
    print(a[1:3, 2:5])
    ‘’’
    [[ 0 1 2 3 4]
    [ 5 6 7 8 9]
    [10 11 12 13 14]
    [15 16 17 18 19]
    [20 21 22 23 24]]
    [[ 7 8 9]
    [12 13 14]]
    ‘’’
    print(a[:, 2:5])
    ‘’’
    [[ 2 3 4]
    [ 7 8 9]
    [12 13 14]
    [17 18 19]
    [22 23 24]]
    ‘’’
    print(a[:, 2:5, None])
    ‘’’
    [[[ 2]
    [ 3]
    [ 4]]
    [[ 7]
    [ 8]
    [ 9]]
    [[12]
    [13]
    [14]]
    [[17]
    [18]
    [19]]
    [[22]
    [23]
    [24]]]
    ‘’’
    多维切片是按照各个维度进行切片操作的。此处分别取第一维的2-3,第二维的3-5,即7 8 9 12 13 14. 从一开始计数

    None代表新增加一个维度。print(a[:, 2:5, None])在第三个维度上用了None,所以成为5x3x1. 如果用在第二个维度,即如下图所示:

    print(a[:, None, 2:5])

    关于三个点的解释

    a[:,:,None] 和a[…, None]等价
    …代替了前面的两个: