一.导入库

  import numpy as np

二.创建

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

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

    创建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大的数

 

 

 

 

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄