• Numpy学习1


    NumPy学习(1)

    参考资料:

    1. http://www.cnblogs.com/zhanghaohong/p/4854858.html
    2. http://linusp.github.io/2016/02/25/creation-and-io-of-ndarray.html

    数组的创建
    数组属性
    数组元素获取-普通索引、切片、布尔索引、花式索引
    统计函数与线性代数运算
    随机数的生成

    NumPy数组:NumPy数组是一个多维数组对象,称为ndarray。

    数组的创建

    一维数组的创建【随机、list、tuple】

    In [15]: import numpy  as np    #导入numpy包
    
    ##创建一个10个随机数的列表
    In [16]: ls1=range(10)          #生成一个10个随机数的列表
    In [17]: ls1
    Out[17]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    In [18]: type(ls1)              #查看类型
    Out[18]: list
    
    
    In [19]: ls2=np.arange(10)     #np.arrange(10,100,10) #生成一个随机数的一维数组
    In [20]: ls2
    Out[20]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    In [21]: type(ls2)
    Out[21]: numpy.ndarray          #类型为数组
    
    
    In [24]: arr1 = np.array([1,2,3,4])     #从list对象中创建数组
    In [25]: arr1
    Out[25]: array([1, 2, 3, 4])
    In [26]: type(arr1)
    Out[26]: numpy.ndarray
    
    
    In [27]: arr2 = np.array((1,2,3,4))     #从tuple中创建数组
    In [28]: arr2
    Out[28]: array([1, 2, 3, 4])
    In [29]: type(arr2)
    Out[29]: numpy.ndarray
    
    
    

    二维数组的创建【列表套列表、元组套元组】

    
    In [30]: arr3 = np.array([[1,2,3],[4,5,6],[7,8,9]]) #列表中套列表的方式创建
    In [31]: arr3
    Out[31]: 
    array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])
    In [32]: type(arr3)
    Out[32]: numpy.ndarray
    
    
    In [33]: arr4 = np.array(((1,2,3),(4,5,6),(7,8,9)))     #元组套元组的方式创建
    In [34]: arr4
    Out[34]: 
    array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])
    In [36]: type(arr4)
    Out[36]: numpy.ndarray
    
    

    几种特殊的数组【zeros、ones、empty】

    In [42]: arr5=np.zeros(5)   #返回5个0的一维数组
    In [43]: arr5
    Out[43]: array([ 0.,  0.,  0.,  0.,  0.])
    In [44]: arr6=np.zeros((3,6))   #返回全为03x6的二维数组
    In [45]: arr6
    Out[45]: 
    array([[ 0.,  0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.,  0.]])
    
    
    In [46]: arr7=np.ones(5)        #返回5个1的一维数组
    In [47]: arr7
    Out[47]: array([ 1.,  1.,  1.,  1.,  1.])
    In [48]: arr8=np.ones([2,4])    #返回2x4的二维数组
    In [49]: arr8
    Out[49]: 
    array([[ 1.,  1.,  1.,  1.],
           [ 1.,  1.,  1.,  1.]])
    
    
    In [50]: arr9=np.empty(4)       #返回4个全为0的一维数组
    In [51]: arr9
    Out[51]: array([ 0.,  0.,  0.,  0.])
    In [52]: arr10=np.empty((3,5))      #返回全为0的数组不安全,一般返回的事未初始化的垃圾值
    In [53]: arr10
    Out[53]: 
    array([[  0.00000000e+000,   6.79335389e-314,   0.00000000e+000,
              1.27319747e-313,   1.27319747e-313],
           [  1.27319747e-313,   2.96439388e-323,   1.90979621e-313,
              0.00000000e+000,   5.92878775e-323],
           [  3.18299369e-313,   0.00000000e+000,   8.89318163e-323,
              6.95038501e-310,   6.32404027e-322]])
              
              
    
    可以使用dtype来指定ndarray的数据类型,如
    In [54]: arr1=np.array([1,2,2,3],dtype=np.float64)
    In [55]: arr1
    Out[55]: array([ 1.,  2.,  2.,  3.])
    In [56]: arr1.dtype
    Out[56]: dtype('float64')
    
    

    数组的属性与数组的函数

    属性

    In [57]: arr3
    Out[57]: 
    array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])
    In [58]: arr3.shape #shape返回数组的行数和列数
    Out[58]: (3, 3)
    
    
    In [59]: arr3.ndim      #ndim返回数组的维数
    Out[59]: 2
    
    
    In [61]: arr3.dtype     #dtype返回数组元素数据类型
    Out[61]: dtype('int64')
    
    In [62]: arr3.ravel()    #ravel()方法将数组拉直(多维数组降成一维数组)
    Out[62]: array([1, 2, 3, 4, 5, 6, 7, 8, 9])
    
    
    In [65]: arr3.size      #size返回数组的个数
    Out[65]: 9
    
    
    In [66]: arr3.T         #数组的转置
    Out[66]: 
    array([[1, 4, 7],
           [2, 5, 8],
           [3, 6, 9]])
    
    
    

    函数

    In [20]: arr1=np.array(((1,2,3),(4,5,6),(7,8,9)))
    In [21]: arr1
    Out[21]: 
    array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])
    In [22]: len(arr1)      #查看数组行数
    Out[22]: 3
    
    
    In [21]: arr1
    Out[21]: 
    array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])
    In [28]: arr2 
    Out[28]: 
    array([[1, 2],
           [3, 4],
           [5, 6]])
    In [30]: arr3 = np.hstack((arr1,arr2))  #hstack横向数组拼接,数组行数必须相同
    
    In [31]: arr3
    Out[31]: 
    array([[1, 2, 3, 1, 2],
           [4, 5, 6, 3, 4],
           [7, 8, 9, 5, 6]])
          
           
    In [27]: arr1
    Out[27]: 
    array([[5, 6],
           [7, 8]])
    In [28]: arr2 
    Out[28]: 
    array([[1, 2],
           [3, 4],
           [5, 6]])
    In [34]: arr4=np.vstack((arr1,arr2))    #vstack纵向拼接,必须列数相同
    
    In [35]: arr4
    Out[35]: 
    array([[5, 6],
           [7, 8],
           [1, 2],
           [3, 4],
           [5, 6]]
           
           
    In [37]: arr1 = np.arange(21)
    In [38]: arr1
    Out[38]: 
    array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
           17, 18, 19, 20])
    In [39]: arr2=arr1.reshape(3,7) #设置数组行数和列数
    In [40]: arr2
    Out[40]: 
    array([[ 0,  1,  2,  3,  4,  5,  6],
           [ 7,  8,  9, 10, 11, 12, 13],
           [14, 15, 16, 17, 18, 19, 20]])       
    In [43]: b = arr2.tolist()      #数组转换成列表
    In [44]: b
    Out[44]: 
    [[0, 1, 2, 3, 4, 5, 6],
     [7, 8, 9, 10, 11, 12, 13],
     [14, 15, 16, 17, 18, 19, 20]]       
    In [45]: arr2.dtype
    Out[45]: dtype('int64')       
    In [46]: arr3=arr2.astype(float)   #转换数据类型
    Out[57]: dtype('float64')   
           
    
    

    数组元素的获取

    一维数组元素的获取

    In [52]: arr = np.arange(10)
    In [53]: arr
    Out[53]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    In [54]: arr[3]     #获取第4个元素
    Out[54]: 3
    
    In [55]: arr[5:8]   #获取第6,7,8三个元素。左闭右开
    Out[55]: array([5, 6, 7])
    
    

    二维数组的获取

    In [57]: arr1 = np.array([[1,2],[3,4],[5,6]])
    In [58]: arr1
    Out[58]: 
    array([[1, 2],
           [3, 4],
           [5, 6]])
    In [60]: arr1[2]    #获取第三行的元素
    Out[60]: array([5, 6])
    
    In [61]: arr1[:2]       #获取前两行元素
    Out[61]: 
    array([[1, 2],
           [3, 4]])
     
    In [62]: arr1[:,1]      #获取第二列的元素
    Out[62]: array([2, 4, 6])   
    
    In [66]: arr1[:,[0,1]]  #获取数组第一列和第三列的元素
    Out[66]: 
    array([[1, 2],
           [3, 4],
           [5, 6]])
    
    In [67]: arr1[0,1]  #获取第1行第二列对应的元素
    Out[67]: 2
    
    

    布尔索引

    In [1]: import numpy as np
    In [2]: names = np.array(['bob','joe','will','bob','will','joe','joe'])
    In [3]: names
    Out[3]: 
    array(['bob', 'joe', 'will', 'bob', 'will', 'joe', 'joe'], 
          dtype='|S4')
    In [8]: data = np.arange(28).reshape(7,4)
    In [9]: data
    Out[9]: 
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11],
           [12, 13, 14, 15],
           [16, 17, 18, 19],
           [20, 21, 22, 23],
           [24, 25, 26, 27]])
    In [14]: names == 'bob'
    Out[14]: array([ True, False, False,  True, False, False, False], dtype=bool)
    In [15]: data[names=='bob'] #返回所有为true的行或为bob的行
    Out[15]: 
    array([[ 0,  1,  2,  3],
           [12, 13, 14, 15]])
           
    In [17]: data[names!='bob'] # !=bob的行
    Out[17]: 
    array([[ 4,  5,  6,  7],
           [ 8,  9, 10, 11],
           [16, 17, 18, 19],
           [20, 21, 22, 23],
           [24, 25, 26, 27]])    
    In [18]: data[names!='bob',3]  #配合切片,选第3列
    Out[18]: array([ 7, 11, 19, 23, 27])       
    In [19]: data[names!='bob'][:2,1:]  也可以这样配合切片
    Out[19]: 
    array([[ 5,  6,  7],
           [ 9, 10, 11]])       
    In [23]: data[(names=='bob')|(names=='joe')]    #可以使用&(和)、|(或)之类的布尔算术运算符,注意加小括号
    Out[23]: 
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [12, 13, 14, 15],
           [20, 21, 22, 23],
           [24, 25, 26, 27]])       
           
           
    In [24]: data[data<10]=0    #布尔型数组设置值
    In [25]: data
    Out[25]: 
    array([[ 0,  0,  0,  0],
           [ 0,  0,  0,  0],
           [ 0,  0, 10, 11],
           [12, 13, 14, 15],
           [16, 17, 18, 19],
           [20, 21, 22, 23],
           [24, 25, 26, 27]])       
           
    

    花式索引

    In [32]: arr=np.arange(32).reshape((8,4))
    In [33]: arr
    Out[33]: 
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11],
           [12, 13, 14, 15],
           [16, 17, 18, 19],
           [20, 21, 22, 23],
           [24, 25, 26, 27],
           [28, 29, 30, 31]])
    In [34]: arr[[4,3,0,6]]     #传入一个数组筛选行
    Out[34]: 
    array([[16, 17, 18, 19],
           [12, 13, 14, 15],
           [ 0,  1,  2,  3],
           [24, 25, 26, 27]])
    In [35]: arr[[4,3,0,6],[0,3,1,2]]       #传入多个数组返回一个一维数组
    Out[35]: array([16, 15,  1, 26])       
           
    
    In [5]: arr=np.arange(32).reshape((8,4))
    In [6]: arr
    Out[6]: 
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11],
           [12, 13, 14, 15],
           [16, 17, 18, 19],
           [20, 21, 22, 23],
           [24, 25, 26, 27],
           [28, 29, 30, 31]])
    In [7]: arr[np.ix_([1,5,7,2],[0,3,1,2])]
    Out[7]: 
    array([[ 4,  7,  5,  6],
           [20, 23, 21, 22],
           [28, 31, 29, 30],
           [ 8, 11,  9, 10]]
    
    
    
    
  • 相关阅读:
    css居中问题(转)
    Request.ServerVariables 各个参数的用法
    html5 画个球碰撞
    递归生成json
    AspNetPager分页结合存储过程的用法
    sql+aspnetpager+查询功能
    求1+2+……+n
    几种排序的比较 bitmapsort,qsort,set
    利用两个栈,反转其中一个栈的元素
    进程间通信(IPC, Inter Process Communication)读书笔记
  • 原文地址:https://www.cnblogs.com/wujiadong2014/p/6545217.html
Copyright © 2020-2023  润新知