Dynamic Python Array Slicing

后端 未结 2 661
一生所求
一生所求 2021-01-13 21:55

I am facing a situation where I have a VERY large numpy.ndarray (really, it\'s an hdf5 dataset) that I need to find a subset of quickly because they entire arra

相关标签:
2条回答
  • 2021-01-13 22:41

    Okay, I finally found an answer just as someone else did.

    Suppose I have array:

    my_array[...]
    >array(
      [[[ 1,  2,  3],
        [ 4,  5,  6],
        [ 7,  8,  9]],
    
       [[10, 11, 12],
        [13, 14, 15],
        [16, 17, 18]]])
    

    I can use the slice object, which apparently is a thing:

    sl1 = slice( None )
    sl2 = slice( 1,2 )
    sl3 = slice( None )
    ad_array.matrix[(sl1, sl2, sl3)]
    >array(
      [[[ 4,  5,  6]],
    
       [[13, 14, 15]]])
    
    0 讨论(0)
  • 2021-01-13 22:48

    You could slice automaticaly using python's slice:

    >>> a = np.random.rand(3, 4, 5)
    >>> a[0, :, 0]
    array([ 0.48054702,  0.88728858,  0.83225113,  0.12491976])
    >>> a[(0, slice(None), 0)]
    array([ 0.48054702,  0.88728858,  0.83225113,  0.12491976])
    

    The slice method reads as slice(*start*, stop[, step]). If only one argument is passed, then it is interpreted as slice(0, stop).

    In the example above : is translated to slice(0, end) which is equivalent to slice(None).

    Other slice examples:

    :5 -> slice(5)
    1:5 -> slice(1, 5)
    1: -> slice(1, None)
    1::2 -> slice(1, None, 2)
    
    0 讨论(0)
提交回复
热议问题