zoukankan      html  css  js  c++  java
  • 科学计算包Numpy

    Numpy

    用于科学计算的python模块,提供了Python中没有的数组对象,支持N维数组运算、处理大型矩阵、成熟的广播函数库、矢量运算、线性代数、傅里叶变换以及随机数生成等功能,并可与C++、FORTRAN等语言无缝结合。

        菜鸟教程:https://www.runoob.com/numpy/numpy-dtype.html

    ·导入numpy模块(打开cmd窗口)

    pip install numpy
    

    ·简单应用

    import numpy as np

    1.生成数组

     1 >>> np.array([1, 2, 3, 4, 5])        # 把列表转换为数组
     2 array([1, 2, 3, 4, 5])
     3 >>> np.array((1, 2, 3, 4, 5))        # 把元组转换成数组
     4 array([1, 2, 3, 4, 5])
     5 >>> np.array(range(5))               # 把range对象转换成数组
     6 array([0, 1, 2, 3, 4])
     7 >>> np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组
     8 array([[1, 2, 3],
     9        [4, 5, 6]])
    10 >>> np.arange(8)                     # 类似于内置函数range()
    11 array([0, 1, 2, 3, 4, 5, 6, 7])
    12 >>> np.arange(1, 10, 2)              #从1到10(包括1,不包括10),步长为2
    13 array([1, 3, 5, 7, 9])
    14 >>> np.linspace(0, 10, 11)        
    15       # 等差数组,包含11个数,从0到10(包括0,也包括10,闭区间),平均分为11个数字array([  0.,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.])
    16 >>> np.linspace(0, 10, 11, endpoint=False) # 不包含终点
    17 array([ 0.        ,  0.90909091,  1.81818182,  2.72727273,  3.63636364,
    18         4.54545455,  5.45454545,  6.36363636,  7.27272727,  8.18181818,
    19         9.09090909])
    20 >>> np.logspace(0, 100, 10)  # 对数数组,从0到100,取10个数,返回10个数分别作为幂,计算基为10的结果数组
    21 array([ 1.00000000e+000,   1.29154967e+011,   1.66810054e+022,
    22         2.15443469e+033,   2.78255940e+044,   3.59381366e+055,
    23         4.64158883e+066,   5.99484250e+077,   7.74263683e+088,
    24         1.00000000e+100])
    25 >>>np.logspace(0, 10, 5)
    26 array([1.00000000e+00, 3.16227766e+02, 1.00000000e+05, 3.16227766e+07,
    27        1.00000000e+10])
    28 >>> np.logspace(1,6,5, base=2) # 对数数组,相当于2 ** np.linspace(1,6,5)
    29 array([  2.        ,   4.75682846,  11.3137085 ,  26.90868529,  64.        ])
    30 >>>np.logspace(1,5,5,base=2)
    31 array([ 2.,  4.,  8., 16., 32.])
    32 >>>np.logspace(1,6,3,base=2)
    33 array([ 2.       , 11.3137085, 64.       ])
    34 >>> np.zeros(3)                     # 全0一维数组
    35 array([ 0.,  0.,  0.])
    36 >>> np.ones(3)                      # 全1一维数组
    37 array([ 1.,  1.,  1.])
    38 >>> np.zeros((3,3))              # 全0二维数组,3行3列
    39 array([[ 0.,  0.,  0.],
    40        [ 0.,  0.,  0.],
    41        [ 0.,  0.,  0.]])
    42 >>> np.zeros((3,1))              # 全0二维数组,3行1列
    43 array([[ 0.],
    44        [ 0.],
    45        [ 0.]])
    46 >>> np.zeros((1,3))              # 全0二维数组,1行3列
    47 array([[ 0.,  0.,  0.]])
    48 >>> np.ones((3,3))               # 全1二维数组
    49 array([[ 1.,  1.,  1.],
    50        [ 1.,  1.,  1.],
    51        [ 1.,  1.,  1.]])
    52 >>> np.ones((1,3))  # 全1二维数组
    53 array([[ 1.,  1.,  1.]])
    54 >>> np.identity(3)  # 单位矩阵
    55 array([[ 1.,  0.,  0.],
    56        [ 0.,  1.,  0.],
    57        [ 0.,  0.,  1.]])
    58 >>> np.identity(2)
    59 array([[ 1.,  0.],
    60        [ 0.,  1.]])
    61 >>> np.empty((3,3)) # 空数组,只申请空间而不初始化,元素值是不确定的
    62 array([[ 0.,  0.,  0.],
    63        [ 0.,  0.,  0.],
    64        [ 0.,  0.,  0.]])
    65 >>> np.random.randint(0, 50, 5)   # 随机数组,5个0到50之间的数字
    66 array([13, 47, 31, 26,  9])
    67 >>> np.random.randint(0, 50, (3,5)) # 3行5列
    68 array([[34,  2, 33, 14, 40],
    69        [ 9,  5, 10, 27, 11],
    70        [26, 17, 10, 46, 30]])
    71 >>> np.random.rand(10)
    72 array([ 0.98139326,  0.35675498,  0.30580776,  0.30379627,  0.19527425,
    73         0.59159936,  0.31132305,  0.20219211,  0.20073821,  0.02435331])
    74 >>> np.random.standard_normal(5)     # 从标准正态分布中随机采样
    75 array([ 2.82669067,  0.9773194 , -0.72595951, -0.11343254,  0.74813065])
    View Code 

    2.数组与数值的算术运算

    >>> a=np.array((1,2,3,4,5))
    >>> a+2
    array([3, 4, 5, 6, 7])
    >>> a-2
    array([-1,  0,  1,  2,  3])
    >>> a*2
    array([ 2,  4,  6,  8, 10])
    >>> a/2
    array([0.5, 1. , 1.5, 2. , 2.5])
    >>> a//2
    array([0, 1, 1, 2, 2], dtype=int32)
    >>> a**2
    array([ 1,  4,  9, 16, 25], dtype=int32)
    

      

    3.数组与数组的算术运算

    >>> a=np.array((1,2,3))
    >>> b=np.array(([1,2,3],[4,5,6],[7,8,9]))
    >>> a+b
    array([[ 2,  4,  6],
           [ 5,  7,  9],
           [ 8, 10, 12]])
    >>> a-b
    array([[ 0,  0,  0],
           [-3, -3, -3],
           [-6, -6, -6]])
    >>> a*b
    array([[ 1,  4,  9],
           [ 4, 10, 18],
           [ 7, 16, 27]])
    >>> a//b
    array([[1, 1, 1],
           [0, 0, 0],
           [0, 0, 0]], dtype=int32)
    

      

    4.二维数组转置

    >>> b=np.array(([1,2,3],[4,5,6],[7,8,9]))
    >>> b
    array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])
    >>> print(b.T)
    [[1 4 7]
     [2 5 8]
     [3 6 9]]
    

      

    5.向量点积

    >>> a=np.array((5,6,7))
    >>> b=np.array((6,6,6))
    >>> np.dot(a,b)
    108
    

      

    6.数组元素访问

    >>> b=np.array(([1,2,3],[4,5,6],[7,8,9]))
    >>> b[0,0]
    1
    >>> b[0][2]
    3
    

      

    多元素同时访问

    >>> x = np.arange(0,100,10,dtype=np.floating)
    >>> x
    array([  0.,  10.,  20.,  30.,  40.,  50.,  60.,  70.,  80.,  90.])
    >>> x[[1, 3, 5]]          # 同时访问多个位置上的元素
    array([ 10.,  30.,  50.])
    

      

    7.三角函数运算

    >>> b=np.array(([1,2,3],[4,5,6],[7,8,9]))
    >>> np.sin(b)
    array([[ 0.84147098,  0.90929743,  0.14112001],
           [-0.7568025 , -0.95892427, -0.2794155 ],
           [ 0.6569866 ,  0.98935825,  0.41211849]])
    

      

    8.四舍五入

    >>> np.round(np.sin(b))
    array([[ 1.,  1.,  0.],
           [-1., -1., -0.],
           [ 1.,  1.,  0.]])
    

      

    9.对矩阵不同维度上的元素进行求和

    >>> x=np.arange(0,10).reshape(2,5)
    >>> x
    array([[0, 1, 2, 3, 4],
           [5, 6, 7, 8, 9]])
    >>> np.sum(x)
    45
    >>> np.sum(x,axis=0)   #每列求和
    array([ 5,  7,  9, 11, 13])
    >>> np.sum(x,axis=1)  #每行求和
    array([10, 35])
    

      

    10.计算矩阵不同维度上元素的均值

    >>> np.average(x,axis=0)
    array([2.5, 3.5, 4.5, 5.5, 6.5])
    >>> np.average(x,axis=1)
    array([2., 7.])
    

      

    11.计算数据的标准差与方差

    >>> x=np.random.randint(0,10,size=(3,3))
    >>> x
    array([[5, 3, 5],
           [3, 6, 2],
           [6, 0, 9]])
    >>> np.std(x)    #标准差
    2.494438257849294
    >>> np.std(x,axis=1)  #列行标准差
    array([0.94280904, 1.69967317, 3.74165739]) >>> np.var(x) #方差 6.222222222222222

      

    12.对矩阵不同维度上的元素求最大值

    >>> x=np.random.randint(0,10,size=(3,3))
    >>> x
    array([[2, 6, 9],
           [1, 8, 3],
           [0, 9, 8]])
    >>> np.max(x)
    9
    >>> np.max(x,axis=1) #每列最大值
    array([9, 8, 9])
    

    13.对矩阵不同维度上的元素进行排序

    >>> np.sort(x)
    array([[2, 6, 9],
           [1, 3, 8],
           [0, 8, 9]])
    >>> np.sort(x,axis=0)
    array([[0, 6, 3],
           [1, 8, 8],
           [2, 9, 9]])
    

    14.生成特殊数组

    >>> np.empty((3,3)) #只申请空间,不初始化,速度很快
    array([[0.00000000e+000, 0.00000000e+000, 0.00000000e+000],
           [0.00000000e+000, 0.00000000e+000, 4.82208070e-321],
           [1.86918698e-306, 1.78021662e-306, 2.46155235e-312]])
    

    15.改变数组大小

    >>> a=np.arange(1,11,1)
    >>> a
    array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])
    >>> a.shape=2,5
    >>> a
    array([[ 1,  2,  3,  4,  5],
           [ 6,  7,  8,  9, 10]])
    >>> a.shape=5,-1  #-1表示自动计算
    >>> a
    array([[ 1,  2],
           [ 3,  4],
           [ 5,  6],
           [ 7,  8],
           [ 9, 10]])
    >>> a.reshape(2,5)
    array([[ 1,  2,  3,  4,  5],
           [ 6,  7,  8,  9, 10]])
    

    16.切片操作

    >>> a=np.arange(10)
    >>> a
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>> a[::-1]
    array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
    >>> a[::2]
    array([0, 2, 4, 6, 8])
    
    >>> c=np.array([[j*10+ i for i in range(6)] for j in range (6)])
    >>> c
    array([[ 0,  1,  2,  3,  4,  5],
           [10, 11, 12, 13, 14, 15],
           [20, 21, 22, 23, 24, 25],
           [30, 31, 32, 33, 34, 35],
           [40, 41, 42, 43, 44, 45],
           [50, 51, 52, 53, 54, 55]])
    >>> c[0,3:5]  #取第0行第三个和第四个元素
    array([3, 4])
    

    17.布尔运算

    >>> x=np.random.rand(10)
    >>> x
    array([0.10905435, 0.57768227, 0.18788365, 0.23399672, 0.93576621,
           0.62251011, 0.54649539, 0.37180411, 0.72779445, 0.05535632])
    >>> x>0.5
    array([False,  True, False, False,  True,  True,  True, False,  True,
           False])
    >>> x[x>0.5]  #取出所有大于0.5的元素
    array([0.57768227, 0.93576621, 0.62251011, 0.54649539, 0.72779445])
    >>> np.array([1,2,3]) < np.array([3,2,1])
    array([ True, False, False])
    >>> np.array([1,2,3]) == np.array([3,2,1])
    array([False,  True, False])
    

    18.取整运算

    >>> x=np.random.rand(10)*50
    >>> x
    array([19.13213223, 38.14702133, 41.30754565, 19.51765474, 19.73843457,
           25.66530995, 34.74361578, 12.44682723,  6.03817843, 34.18593124])
    >>> np.array([t-int(t) for t in x])    #获取小数部分
    array([0.13213223, 0.14702133, 0.30754565, 0.51765474, 0.73843457,
           0.66530995, 0.74361578, 0.44682723, 0.03817843, 0.18593124])
    

    19.广播

    >>> a=np.arange(0,60,10).reshape(-1,1)
    >>> b=np.arange(0,6)
    >>> a
    array([[ 0],
           [10],
           [20],
           [30],
           [40],
           [50]])
    >>> b
    array([0, 1, 2, 3, 4, 5])
    >>> a+b
    array([[ 0,  1,  2,  3,  4,  5],
           [10, 11, 12, 13, 14, 15],
           [20, 21, 22, 23, 24, 25],
           [30, 31, 32, 33, 34, 35],
           [40, 41, 42, 43, 44, 45],
           [50, 51, 52, 53, 54, 55]])
    

    20.分段函数

    >>> x=np.random.randint(0,10,size=(1,10))
    >>> x
    array([[4, 4, 8, 9, 0, 0, 4, 0, 3, 5]])
    >>> np.where(x<5,0,1)  #选出小于5,0,1的数
    array([[0, 0, 1, 1, 0, 0, 0, 0, 0, 1]])
    >>>np.piecewise(x,[x<7,x>4],[lambda x:x*2,lambda x:x*3])  #小于7的数乘2,大于4的数乘3
    array([[ 8,  8, 24, 27,  0,  0,  8,  0,  6, 15]])
    

    21.计算唯一值以及出现次数

    >>> x=np.random.randint(0,10,10)
    >>> x
    array([1, 1, 0, 2, 7, 1, 6, 6, 9, 7])
    >>> np.unique(x)    #计算唯一值
    array([0, 1, 2, 6, 7, 9])
    >>> np.bincount(x)  #计算出现的次数,但是因为访问是无序的,所以最后并不是顺序计数
    array([1, 3, 1, 0, 0, 0, 2, 2, 0, 1], dtype=int64)
    

    22.计算加权平均值

    >>> y=np.array([round(i,1) for i in list (np.random.random(10))])
    >>> y
    array([0.2, 0. , 0.6, 0.3, 0.7, 0. , 0.7, 0.4, 0.8, 0.7])   #随机生成10个0-1之间的带一位小数的数
    >>> np.sum(x*y)/np.sum(np.bincount(x))   #平均值
    2.44
    

    23.矩阵运算

      

    >>> a_list=[3,5,7]
    >>> a_mat=np.matrix(a_list)   #设置为矩阵库
    >>> a_mat
    matrix([[3, 5, 7]])
    >>> np.shape(a_mat)   #矩阵为一行三列
    (1, 3)
    >>> b_mat=np.matrix((1,2,3))
    >>> b_mat
    matrix([[1, 2, 3]])
    >>> a_mat * b_mat.T  #矩阵乘法
    matrix([[34]])
    >>> a_mat.argsort()  #返回的是数组值从小到大的索引值
    matrix([[0, 1, 2]], dtype=int64)
    >>> a_mat.sum()
    15
    >>> a_mat
    matrix([[3, 5, 7]])
    >>> a_mat.mean()
    5.0
    >>> a_mat.max()
    7
    
  • 相关阅读:
    虚拟机中按键切回windows系统界面快捷键
    余数
    质数(素数)判断代码实现
    =excel========》函数使用
    python 正则表达式规则
    linux常用命令详解
    c指针
    visual studio 2015 开发时常见问题的解决方案
    python装饰器
    构造方法
  • 原文地址:https://www.cnblogs.com/msq2000/p/11989822.html
Copyright © 2011-2022 走看看