代码之家  ›  专栏  ›  技术社区  ›  user697911

为什么会产生这两个结果?

  •  0
  • user697911  · 技术社区  · 7 年前
    In [18]: z = np.array([[6,7,3],[8,8,8]])                                                                                                                                                      
    
    In [19]: z                                                                                                                                                                                    
    Out[19]: 
    array([[6, 7, 3],
           [8, 8, 8]])
    
    In [20]: print(z[0:, :0])                                                                                                                                                                     
    []
    
    In [21]: print(z[1:, :1])                                                                                                                                                                     
    [[8]]
    

    我不明白这两份打印的声明。例如,z[1:,:1]?

    1 回复  |  直到 7 年前
        1
  •  0
  •   hpaulj    7 年前

    在每个值都不同的位置创建一个数组:

    In [134]: z = np.arange(6).reshape(2,3)
    In [135]: z
    Out[135]: 
    array([[0, 1, 2],
           [3, 4, 5]])
    

    尝试0切片上的变体:

    In [136]: z[0:,:]
    Out[136]: 
    array([[0, 1, 2],
           [3, 4, 5]])
    In [137]: z[:,:0]
    Out[137]: array([], shape=(2, 0), dtype=int64)
    In [138]: z[0:,:0]
    Out[138]: array([], shape=(2, 0), dtype=int64)
    

    “0:”与“:”和“::”相同,并且 slice(None,None,None)

    现在,在1个切片上进行更改:

    In [139]: z[1:,:]
    Out[139]: array([[3, 4, 5]])
    In [140]: z[:,:1]
    Out[140]: 
    array([[0],
           [3]])
    In [141]: z[1:,:1]
    Out[141]: array([[3]])
    

    '1:'除了第一片以外,所有的都是;对于大小为“1:2”的2维,为大小为1的切片1'还将“0:1”另一个大小为1的切片,因此得到(1,1)形状结果。