NumPy - 索引和切片

  • 简述

    ndarray 对象的内容可以通过索引或切片来访问和修改,就像 Python 的内置容器对象一样。
    如前所述,ndarray 对象中的项目遵循从零开始的索引。提供三种类型的索引方法 -field access, basic slicingadvanced indexing.
    基本切片是 Python 对 n 维切片的基本概念的扩展。一个 Python 切片对象是通过给出start, stop, 和step内置参数slice功能。将此切片对象传递给数组以提取数组的一部分。
  • 示例 1

    
    import numpy as np 
    a = np.arange(10) 
    s = slice(2,7,2) 
    print a[s]
    
    它的输出如下 -
    
    [2  4  6]
    
    在上面的例子中,一个ndarray对象由arange()功能。然后分别使用 start、stop 和 step 值 2、7 和 2 定义切片对象。当这个切片对象被传递给 ndarray 时,它的一部分从索引 2 开始到 7,步长为 2 被切片。
    也可以通过将分片参数用冒号 : (start:stop:step) 直接传递给ndarray目的。
  • 示例 2

    
    import numpy as np 
    a = np.arange(10) 
    b = a[2:7:2] 
    print b
    
    在这里,我们将得到相同的输出 -
    
    [2  4  6]
    
    如果只放一个参数,则返回与索引对应的单个项目。如果在其前面插入 :,则从该索引开始的所有项目都将被提取。如果使用两个参数(在它们之间带有 :),则默认第一步的两个索引(不包括停止索引)之间的项目将被切片。
  • 示例 3

    
    # slice single item 
    import numpy as np 
    a = np.arange(10) 
    b = a[5] 
    print b
    
    它的输出如下 -
    
    5
    
  • 示例 4

    
    # slice items starting from index 
    import numpy as np 
    a = np.arange(10) 
    print a[2:]
    
    现在,输出将是 -
    
    [2  3  4  5  6  7  8  9]
    
  • 示例 5

    
    # slice items between indexes 
    import numpy as np 
    a = np.arange(10) 
    print a[2:5]
    
    在这里,输出将是 -
    
    [2  3  4] 
    
    以上描述适用于多维ndarray也。
  • 例 6

    
    import numpy as np 
    a = np.array([[1,2,3],[3,4,5],[4,5,6]]) 
    print a  
    # slice items starting from index
    print 'Now we will slice the array from the index a[1:]' 
    print a[1:]
    
    输出如下 -
    
    [[1 2 3]
     [3 4 5]
     [4 5 6]]
    Now we will slice the array from the index a[1:]
    [[3 4 5]
     [4 5 6]]
    
    切片还可以包括省略号 (...) 以生成长度与数组维度相同的选择元组。如果在行位置使用省略号,它将返回一个包含行中项目的 ndarray。
  • 例 7

    
    # array to begin with 
    import numpy as np 
    a = np.array([[1,2,3],[3,4,5],[4,5,6]]) 
    print 'Our array is:' 
    print a 
    print '\n'  
    # this returns array of items in the second column 
    print 'The items in the second column are:'  
    print a[...,1] 
    print '\n'  
    # Now we will slice all items from the second row 
    print 'The items in the second row are:' 
    print a[1,...] 
    print '\n'  
    # Now we will slice all items from column 1 onwards 
    print 'The items column 1 onwards are:' 
    print a[...,1:]
    
    该程序的输出如下 -
    
    Our array is:
    [[1 2 3]
     [3 4 5]
     [4 5 6]] 
     
    The items in the second column are: 
    [2 4 5] 
    The items in the second row are:
    [3 4 5]
    The items column 1 onwards are:
    [[2 3]
     [4 5]
     [5 6]]