• numpy


    一.导入库

      import numpy as np

    二.创建

      1.numpy中只有一种数据类型:ndarray,表示n维数组

        创建ndarray数组:

          -由列表或者元组类型创建数组

          -有元组类型创建数组

          -创建特殊数组

      2.采用np.array函数来创建,语法为:

        np.array(列表或元组)

        将参数列表或者元组转换成ndarray类型.相当于强制类型转换

          a=np.array([1,2,3,5,19]) 由列表创建一维数组

          b=np.array([[1,1,1],[2,2,2],[3,3,3]]) 由列表创建二维数组

          a=np.array((1,2,3,5,19)) 由元组创建一维数组

          b=np.array(((1,1,1),(2,2,2),(3,3,3))) 由元组创建二维数组

          b=np.array(([1,1,1],(2,2,2),[3,3,3])) 混搭的。。。

        创建数组时,可以用dtype指定数据类型:

          a=np.array([1,2,3,5,19],dtype=np.int32)

        当不指定dtype的时候,numpy会根据数据自动匹配合适的类型

    三.数组类型的属性

      生成一个数组  :   b=np.array([[1,1,1],[2,2,2],[3,3,3]])

      .ndim:数据是几维的:b.ndim的值为2

      .shape:数据的形状,即尺寸:b.shape的结果为(3,3)

      .size: 数组中元素的数量 b.size的值为9

      .dtype: 数组元素的数据类型 b.dtype 的结果为 int32

      .itemsize:数组中元素所占的字节数

    四.利用函数创建特殊数组

      1.全零数组

        ①np.zeros(shape, dtype = float)

          shape为数组的形状,是列表类型或者元组类型

          dtype是数据的类型,可以是整数或者实数,该参数可以省略

          例子:a=np.zeros((3,3),dtype=int),则a里面是一个3*3的全零数组

        ②np.zeros_like(a)

          a为一个已知的数组,np.zeros_like(a)生成一个与a形状相同的全零数组

          a=np.array([[1,2],[2,3],[3,5]]) # a是一个三行两列的矩阵

          则np.zeros_like(a) 生成一个三行两列的全零数组

      2.全1数组

        ①numpy.ones(shape, dtype)

          np.ones: 创建指定形状的数组,数组元素以 1 来填充

          例如:np.ones([5,5],dtype=np.int32) #五行五列全是1的数组

        ②np.ones_like(a)

          参数a为一个已知的数组,该函数根据数组a的形状生成一个全1的数组

      3.全是某个值的数组

      ①np.full(shape,fill_value)

        根据指定的shape生成一个全是fill_value的数组

        例如:np.full((4,7),8) #四行七列全是8的数组

      ②np.full_like(a,8) 生成一个与数组a相同,且里面元素都是8的数组

    5.np.eye生成单位矩阵

      np.eye(n)

      生成一个n行n列的单位矩阵

    6.np.arange选定数值范围创建数组

      语法 np.arange(start, stop, step, dtype)

      start :起始值,默认为0

      stop : 终止值(不包含)

      step : 步长,默认为1

      dtype :类型,可以省

      例子:

        np.arange(10)            #输出array([0,1,2,3,4,5,6,7,8,9])

        np.arange(2,15)           #输出array([2,3,4,5,6,7,8,9,10,11,12,13,14])

        np.arange(3,20,5)           #输出array([3,8,13,18])

        c=np.arange(9).reshape(3,3)    #输出array([[0, 1, 2],

                               [3, 4, 5],

                               [6, 7, 8]])

      注意:使用np.arange生成的数组都是一维的,如何变成多维呢?使用数组的reshape方法

      例如:np.arange(100).reshape(10,10)

      方法的调用!!!! 用变量名.方法名

    七.创建线性一维数组

      np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

      start : 序列的起始值

      stop : 序列的终止值,如果endpoint为true,该值包含于数列中

      num : 要生成的等步长的样本数量,默认为50

      endpoint : 该值为True时,数列中包含stop值,反之不包含,默认是True

      retstep : 如果为True时,生成的数组中会显示间距,反之不显示

      dtype : ndarray的数据类型

      例如:a = np.linspace(1,10,10) array([1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])

    八.生成随机数组

      1.numpy中有个随机数子库,叫做np.random。

       里面包含很多随机数生成算法,使用的时候,采用 np.random.方法名 的形式去使用。

        ①np.random.rand(d0,d1,...dn) 根据d0,d1,...dn的值生成[0,1)之间均匀分布的随机数组。

        ②np.random.randn(d0,d1,...dn) 根据d0,d1,...dn的值生成[0,1)之间标准正太分布的随机数组。

        ③np.random.randint(low,high,shape)在[low,high)区间生成shape形状的随机数组

          例如:np.random.randint(1,10,[5,5])

            np.random.randint(1,10) 生成1-10之间的随机整数(一个整数)

        ④np.random.seed(s) 随机数种子函数 : 参数必须是整数类型

        ⑤np.random.shuffle(a) 把数组a打乱顺序

        ⑥np.random.choice(a,size,replace=False)

          解释:从数组a中,随机等概率选取数据,构成shape形状的数组。

             当replace的值默认为True,此时,数据可以被重复选取,当不希望重复选取数据的时候,修改replace=False

        ⑦np.random.uniform(low,high,size):在[low,high)之间等概率的抽取元素,产生形状为size的数组。

        ⑧np.random.normal(loc,scale,size):产生均值为loc,方差为scale的尺寸为size的符合正态分布的数组

        ⑨np.poisson:生成泊松分布的数组

    九.数组的变换-改变形状

      1.reshape函数: 改变数组的形状,不改变数组元素的个数,原数组不变,生成一个和原数组数据一样的新数组。

             有两种reshape。一种是np的函数,一种是数组的方法.

               假设a=np.arange(100), 则a为含有100个元素的一维数组。则改变a为10*10的数组,

               方法有:

                   b=np.reshape(a,(10,10))   # np的函数

              b=a.reshape(10,10)     # 数组的方法

              b=a.reshape((10,10))

             执行完上面的代码后,b为10*10的数组,而a还是含有100个元素的1维数组

      2.resize((shape),refcheck=True) #refcheck默认是true,自身调用时须改成false

        功能与reshape相同,但是改变原数组

        a.resize((1,9)) a变为一维数组了。

        ①当resize()是用np调用的时候,这时需要第一个参数是矩阵本身,然后记得加括号,是改正后 的矩阵维度, 这时有返回值,可以打印出

          例如:>>>a=np.arange(100)

            >>> b=np.resize(a,(1,9))

            >>> b

            输出:array([[0, 1, 2, 3, 4, 5, 6, 7, 8]])

        ②当resize()是矩阵自己调用自己时,函数没有返回值,因此是None,但是也改变了ndarray的值,

         这时再打印ndarray就是被resize()改变后的值 ***自身调用时,refcheck=False

          例如:>>>a=np.arange(100)

          >>>a.resize((1,9),refcheck=False)

          >>>a

          结果:array([[0, 1, 2, 3, 4, 5, 6, 7, 8]])

    十.数组的变换-扁平化

      1.flatten()函数,数组扁平化,也就是把多维数组变成一维数组,但是原数组不变。

        假设a是一个二维数组,则a.flatten(),得到一个按行展开的一维数组

        例如:>>>a=np.random.randint(1,5,[3,3])

        >>>a

        结果:array([[4, 2, 2],

              [4, 1, 1],

                 [1, 3, 2]])

        >>>a.flatten()

        结果:array([4, 2, 2, 4, 1, 1, 1, 3, 2])

        >>>a

        结果:array([[4, 2, 2],

              [4, 1, 1],

                [1, 3, 2]])

      2.a.astype()函数  改变类型的函数

        b=a.astype(np.float16),生成一个新数组,新数组中与原数组元素相同,类型不同。

        注意:原数组类型不发生变化

        例如:>>>a=np.random.randint(1,5,[3,3])

          >>>a

          结果:array([[4, 2, 4],

                [2, 3, 4],

                [1, 1, 4]])

          >>>a.astype(np.float16)

          结果:array([[4., 2., 4.],

                [2., 3., 4.],

               [1., 1., 4.]], dtype=float16)

          >>>a

          结果:array([[4, 2, 4],

                [2, 3, 4],

                [1, 1, 4]])

      3.a.tolist()函数 把数组a变成列表

        a.T 与a.transpose() 数组的转置 ,都不改变原数组

        例如:>>>a=np.random.randint(1,5,[3,3])

        >>>a

        结果:array([[4, 4, 4],

              [3, 4, 2],

              [3, 3, 1]])

        >>>a.tolist()

        结果:[[4, 4, 4], [3, 4, 2], [3, 3, 1]]

        >>>a.T

        结果:array([[4, 3, 3],

              [4, 4, 3],

              [4, 2, 1]])

        >>>a.transpose()

        结果:array([[4, 3, 3],

              [4, 4, 3],

              [4, 2, 1]])

        >>>a

        结果:array([[4, 4, 4],

              [3, 4, 2],

              [3, 3, 1]])

    十一.常用函数及其使用

      1.统计函数   

        使用方法:①np.函数名 ②数组变量.函数名

    sum

    求和

    mean

    求平均值

    std

    求标准差

    var

    求方差

    median

    求中位数

    max

    求最大值

    min

    求最小值

    average()

    加权平均数

          举例:

            求和:

            np.sum(a) 和 a.sum(): 求数组a中所有元素的和。

            np.sum(a,axis=0)和 a.sum(axis=0) : 对数组a按行求和

            np.sum(a,axis=1)和 a.sum(axis=0) : 对数组a按列求和

            求均值

            np.mean(a)和a.mean() 求数组a中所有元素的均值

            np.mean(a,axis=0)和a.mean(axis=0) 求数组a中所有列的均值

            np.mean(a,axis=1)和a.mean(axis=1) 求数组a中所有行的均值

          其它统计函数的用法类似

      2.数学函数 

        

    np.sin()

    正弦

    np.cos()

    余弦

    np.tan()

    正切

    np.arcsin()

    反正弦

    np.arccos()

    反余弦

    np.arctan()

    反正切

    np.degree()

    将弧度转换为角度

    np.ptp(a)

    计算数组a种最大值与最小值的差

      3.舍入函数

        

    np.around()

    四舍五入

    np.floor()

    向下取整

    np.ceil()

    向上取整

      4.排序函数  

        np.sort(a, axis, kind):对数组a按axis所指定的轴进行排序,排序采用kind参数指定的算法。kind参数可以省略

    十二.数组的索引与切片

      1.一维数组的索引和切片

        索引:a[0],a[-1]

        切片:数组名[起始位置:结束位置:步长] a[1:10:2]

      2.多维数组的索引和切片

        索引:a[0,5,7] 多个维度之间用逗号分隔。

           a[0,5,7]表示 第一维数据,选第0个,第2维数据,选第5个,第三维数据,选第7个

        切片: ①选择多行: a[起始行:结束行]

           ②格式: a[m:n,p:q] 第一维选择m到n行,不包括n,第2维选择p到q列,不包括q

      3.列表做索引:

        ①选择多行,把多行包装成列表,作为索引,

          如:a[[0,3]]表示选择第0行和第3行。当选择整行,不考虑列的时候,可以不写列

        ②np.ix_函数: 能把两个一维数组 转换为 一个用于选取方形区域的索引器。

               实际意思就是,直接往np.ix_()里扔进两个一维数组[1,3],[2,4,5],就能先选1,3行,再选2,4,5列。

        ④布尔索引--条件索引

          大于5的数: a[a>5]

          能被5整除的数a[a%5==0]

          既能被2整除,又大于5的数:b=a[a%2==0] c=b[b>5]

    十三.ndarray类型数据的运算 

      1.数组与标量(单个数据)之间的运算:相当于数组中的每个元素与标量之间的运算,例如:a=np.arange(10).reshape(2,5) a+5,相当于a中每个元素都加了5,

      2.数据规范化

        如何规范化:随机生成一个二维数组,对数组进行规范化,即数组中每个元素减去数组元素的均值除以数组元素的方差:

        a=a.mean()/a.std()

      3.numpy中一元函数:作用到元素上

        对数组运算,实际上是对数组中每个数据进行运算。

        np.abs() 求数组中各个元素的绝对值,结果可以是整数或者实数

        np.fabs() 求数组中各个元素的绝对值,结果是实数

        np.sqrt() 求数组中各个元素的平方根

        np.log np.log10 np.log2 计算数组中各个元素的自然对数、以10为底的对数, 以2为底的对数

        np.ceil()和np.floor分别表示的是对数组中各个元素进行取整

        np.rint()对数组中每个元素进行四舍五入

        np.sin() np.cos() np.tan() np.cosh() np.sinh() np.tanh() 对数组中的每个元素进行三角运算。

        np.sign() 计算数组中每个元素的符号值,结果为1,0,或-1分别表示正数,0和负数

        np.exp() 计算数组中每个元素的指数值

      4.numpy中的二元函数和二元运算

        两个同尺寸的数组加减乘除,相当于对应元素的加减乘除

        np.maximum(a,b) 求两个数组a和b对应元素的最大值

        np.minimum(a,b) 求两个数组a和b对应元素的最小值

        np.mod(a,b) a中元素除以b中元素的余数

        np.copysign(x,y) 将数组y中各元素的符号赋值给x中元素的符号

        关系运算符号:> 、>=、< 、<= 、 ==、 !=对应元素进行比较

        a[a>b] 在a中找出比数组b大的数

  • 相关阅读:
    重磅!容器集群监控利器 阿里云Prometheus 正式免费公测
    阿里开源 KT Connnect,轻量级云原生测试环境治理平台来啦!
    使用Velero Restic快速完成云原生应用迁移至ACK集群
    Kubernetes 弹性伸缩全场景解析 (一):概念延伸与组件布局
    北京DAY1下午
    洛谷 P3041 [USACO12JAN] Video Game Combos
    Tyvj 1729 文艺平衡树
    bzoj 3238: [AHOI2013]差异
    bzoj 2957: 楼房重建
    bzoj 2660: [Beijing wc2012]最多的方案
  • 原文地址:https://www.cnblogs.com/guofeng-1016/p/12935475.html
Copyright © 2020-2023  润新知