• NumPy高级索引-----广播


    1.首先,我们回顾一下NumPy的数组属性

    np.shape:重塑数组  如 :a = np.array([[1,2,3],[4,5,6]]) a.shape = (3,2) 

    np.reshape:重塑数组  如:a = np.array([[1,2,3],[4,5,6]])    b = a.reshape(3,2) 

    np.ndim:返回数组的维数

    np.itemsize:返回数组中每个元素的字节单位长度

    np.flage:当前值的状态,属性参考上一篇

    2.来自现有数据的 一些函数方法

    (1)ndarray就不多解释了

    (2)np.frombuffer:暴露缓冲区接口的任何对象都用作参数来返回

    import numpy as np 
    s =  'Hello World' 
    a = np.frombuffer(s, dtype =  'S1')  
    print (a)

    输出:

    ['H'  'e'  'l'  'l'  'o'  ' '  'W'  'o'  'r'  'l'  'd']

    (3)np.fromiter:从任何可迭代对象构建一个ndarray对象,返回一个新的一维数组

    # 从列表中获得迭代器  
    import numpy as np 
    list = range(5) 
    it = iter(list)  
    # 使用迭代器创建 ndarray 
    x = np.fromiter(it, dtype =  float)  
    print (x)

    输出:

    [0.   1.   2.   3.   4.]

    (4)np.linspace:指定了范围之间的均匀间隔数量,而不是步长

    import numpy as np
    x = np.linspace(10,20,5)  
    print (x)

    输出:

    [10.   12.5   15.   17.5  20.]

    (5)np.logspace:其中包含在对数刻度上均匀分布的数字。 刻度的开始和结束端点是某个底数的幂

    # 将对数空间的底数设置为 2  
    import numpy as np
    a = np.logspace(1,10,num =  10,  base  =  2)  
    print (a)

    输出:

    [ 2.     4.     8.    16.    32.    64.   128.   256.    512.   1024.]

    3.高级索引

    (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]

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

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

    输出:

    大于 5 的元素是:
    [ 6  7  8  9 10 11]

    4.广播

    释义:广播是指 NumPy 在算术运算期间处理不同形状的数组的能力。 对数组的算术运算通常在相应的元素上进行。

    例如:

    import numpy as np 
    
    a = np.array([1,2,3,4]) 
    b = np.array([10,20,30,40]) 
    c = a * b     
    print (c)

    输出:

    [10   40   90   160]

      对于不同维度的数组,本无法进行元素之间的操作,但NumPy提供了这个功能。例如

    import numpy as np 
    a = np.array([[0.0,0.0,0.0],[10.0,10.0,10.0],[20.0,20.0,20.0],[30.0,30.0,30.0]]) 
    b = np.array([1.0,2.0,3.0])  
      
    print (a + b)

    输出:

    [[ 1. 2. 3.]
     [ 11. 12. 13.]
     [ 21. 22. 23.]
     [ 31. 32. 33.]]

    5.数组上的迭代

    迭代器对象np.nditer,它是一个有效的多维迭代器对象,可以用于在数组上进行迭代。

    a = np.arange(0,60,5) 
    a = a.reshape(3,4)  
     
    for x in np.nditer(a):  
        print (x)

    输出:

    0 5 10 15 20 25 30 35 40 45 50 55

    注意:迭代的顺序匹配数组的内容布局,而不考虑特定的排序。----也就是说,数组的变换和布局是不影响对其原始数组的迭代的,最终会按着原始数组的形式进行迭代。如果经过了拷贝,那就以拷贝后的新数组为原始对象。

       广播的迭代:

    import numpy as np 
    a = np.arange(0,60,5) 
    a = a.reshape(3,4)  
    print ( '第一个数组:')  
    print (a) 
    print  ('
    ')  
    print  ('第二个数组:' )
    b = np.array([1,  2,  3,  4], dtype =  int)  
    print (b) 
    print  ('
    '  )
    print ( '修改后的数组是:'  )
    for x,y in np.nditer([a,b]):  
        print ( "%d:%d"  %  (x,y))

    输出:

    第一个数组:
    [[ 0  5 10 15]
     [20 25 30 35]
     [40 45 50 55]]
    第二个数组:
    [1 2 3 4]
    修改后的数组是:
    0:1 5:2 10:3 15:4 20:1 25:2 30:3 35:4 40:1 45:2 50:3 55:4

    下一篇接着讲NumPy的函数和Matplolib库。

  • 相关阅读:
    2011年上半年软考信息系统项目管理师顺利通过了。
    技术工程师之歌
    大家都很注重能力的时候,我却在努力提高学历
    新的开发团队配合模式,适合小型团队
    研发部的四套马车
    mysql给root开启远程访问权限,修改root密码
    js客户端判断文件大小限制上传
    metro 微博api开发,post请求
    VS2010在C#头文件添加文件注释的方法
    android ListView 常见问题 之 高度问题
  • 原文地址:https://www.cnblogs.com/qianshuixianyu/p/9245145.html
Copyright © 2020-2023  润新知