numpy index slice with None

后端 未结 1 933
耶瑟儿~
耶瑟儿~ 2020-12-14 23:11

Working through a sliding-window example for numpy. Was trying to understand the ,None of start_idx = np.arange(B[0])[:,None]

foo =         


        
相关标签:
1条回答
  • 2020-12-15 00:09

    foo[:, None] extends the 1 dimensional array foo into the second dimension. In fact, numpy uses the alias np.newaxis to do this.

    consider foo

    foo = np.array([1, 2])
    print(foo)
    
    [1 2]
    

    A one dimensional array has limitations. For example, what's the transpose?

    print(foo.T)
    
    [1 2]
    

    The same as the array itself

    print(foo.T == foo)
    
    [ True True]
    

    This limitation has many implications and it becomes useful to consider foo in higher dimensional context. numpy uses np.newaxis

    print(foo[np.newaxis, :])
    
    [[1 2]]
    

    But this np.newaxis is just syntactic sugar for None

    np.newaxis is None
    
    True
    

    So, often we use None instead because it's less characters and means the same thing

    print(foo[None, :])
    
    [[1 2]]
    

    Ok, let's see what else we could've done. Notice I used the example with None in the first position while OP use the second position. This position specifies which dimension is extended. And we could've taken that further. Let these examples help explain

    print(foo[None, :])  # same as foo.reshape(1, 2)
    
    [[1 2]]
    

    print(foo[:, None])  # same as foo.reshape(2, 1)
    
    [[1]
     [2]]
    

    print(foo[None, None, :])  # same as foo.reshape(1, 1, 2) 
    
    [[[1 2]]]
    

    print(foo[None, :, None])  # same as foo.reshape(1, 2, 1)
    
    [[[1]
      [2]]]
    

    print(foo[:, None, None])  # same as foo.reshape(2, 1, 1)
    
    [[[1]]
    
     [[2]]]
    

    Keep in mind which dimension is which when numpy prints the array

    print(np.arange(27).reshape(3, 3, 3))
    
              dim2        
              ────────⇀
    dim0 →  [[[ 0  1  2]   │ dim1
              [ 3  4  5]   │
              [ 6  7  8]]  ↓
              ────────⇀
         →   [[ 9 10 11]   │
              [12 13 14]   │
              [15 16 17]]  ↓
              ────────⇀
         →   [[18 19 20]   │
              [21 22 23]   │
              [24 25 26]]] ↓
    
    0 讨论(0)
提交回复
热议问题