zoukankan      html  css  js  c++  java
  • NumPy

    NumPy - 高级索引

    如果一个ndarray是非元组序列,数据类型为整数或布尔值的ndarray,或者至少一个元素为序列对象的元组,我们就能够用它来索引ndarray。高级索引始终返回数据的副本。 与此相反,切片只提供了一个视图。

    有两种类型的高级索引:整数和布尔值。

    整数索引

    这种机制有助于基于 N 维索引来获取数组中任意元素。 每个整数数组表示该维度的下标值。 当索引的元素个数就是目标ndarray的维度时,会变得相当直接。

    以下示例获取了ndarray对象中每一行指定列的一个元素。 因此,行索引包含所有行号,列索引指定要选择的元素。

    示例 1

    import numpy as np 
    
    x = np.array([[1,  2],  [3,  4],  [5,  6]]) 
    y = x[[0,1,2],  [0,1,0]]  
    print y
    

    输出如下:

    [1  4  5]
    

    该结果包括数组中(0,0)(1,1)(2,0)位置处的元素。

    下面的示例获取了 4X3 数组中的每个角处的元素。 行索引是[0,0][3,3],而列索引是[0,2][0,2]

    示例 2

    import numpy as np 
    x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
    print  '我们的数组是:'  
    print x 
    print  '
    ' 
    rows = np.array([[0,0],[3,3]]) 
    cols = np.array([[0,2],[0,2]]) 
    y = x[rows,cols]  
    print  '这个数组的每个角处的元素是:'  
    print y
    

    输出如下:

    我们的数组是:                                                                 
    [[ 0  1  2]                                                                   
     [ 3  4  5]                                                                   
     [ 6  7  8]                                                                   
     [ 9 10 11]]
    
    这个数组的每个角处的元素是:                                      
    [[ 0  2]                                                                      
     [ 9 11]]
    

    返回的结果是包含每个角元素的ndarray对象。

    高级和基本索引可以通过使用切片:或省略号...与索引数组组合。 以下示例使用slice作为列索引和高级索引。 当切片用于两者时,结果是相同的。 但高级索引会导致复制,并且可能有不同的内存布局。

    示例 3

    import numpy as np 
    x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
    print  '我们的数组是:'  
    print x 
    print  '
    '  
    # 切片
    z = x[1:4,1:3]  
    print  '切片之后,我们的数组变为:'  
    print z 
    print  '
    '  
    # 对列使用高级索引 
    y = x[1:4,[1,2]] 
    print  '对列使用高级索引来切片:'  
    print y
    

    输出如下:

    我们的数组是:
    [[ 0  1  2] 
     [ 3  4  5] 
     [ 6  7  8]
     [ 9 10 11]]
    
    切片之后,我们的数组变为:
    [[ 4  5]
     [ 7  8]
     [10 11]]
    
    对列使用高级索引来切片:
    [[ 4  5]
     [ 7  8]
     [10 11]]
    

    布尔索引

    当结果对象是布尔运算(例如比较运算符)的结果时,将使用此类型的高级索引。

    示例 1

    这个例子中,大于 5 的元素会作为布尔索引的结果返回。

    import numpy as np 
    x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
    print  '我们的数组是:'  
    print x 
    print  '
    '  
    # 现在我们会打印出大于 5 的元素  
    print  '大于 5 的元素是:'  
    print x[x >  5]
    

    输出如下:

    我们的数组是:
    [[ 0  1  2] 
     [ 3  4  5] 
     [ 6  7  8] 
     [ 9 10 11]] 
    
    大于 5 的元素是:
    [ 6  7  8  9 10 11]
    

    示例 2

    这个例子使用了~(取补运算符)来过滤NaN

    import numpy as np 
    a = np.array([np.nan,  1,2,np.nan,3,4,5])  
    print a[~np.isnan(a)]
    

    输出如下:

    [ 1.   2.   3.   4.   5.]
    

    示例 3

    以下示例显示如何从数组中过滤掉非复数元素。

    import numpy as np 
    a = np.array([1,  2+6j,  5,  3.5+5j])  
    print a[np.iscomplex(a)]
    

    输出如下:

    [2.0+6.j  3.5+5.j]
  • 相关阅读:
    mysql 存储过程中的 prepare语句(存储过程中动态增减表字段)
    MYSQL创建分区时候报错
    mysql存储过程调试方法
    磁力块[分块]
    区间最优覆盖问题[差分]
    区间最优覆盖问题[差分]
    导弹防御[差分]
    导弹防御[差分]
    CF10D LCIS[动态规划]
    CF10D LCIS[动态规划]
  • 原文地址:https://www.cnblogs.com/navysummer/p/9640723.html
Copyright © 2011-2022 走看看