机器学习--Numpy库

版权声明:如需转载请联系博主! From 博主Haolin https://blog.csdn.net/ohh_haolin/article/details/86181886

学习目的

通过使用numpy库实现基础的矩阵操作

官方文档

https://www.numpy.org.cn/

万金油语句

  • help()
    查看某个函数的帮助信息

    print(help(np.array))
    
蒟蒻的提醒

在这篇博客之中不纠结对于axis的参数设定的具体含义,一律如表所示

代码 含义
axis=1 对于每行进行操作
axis=0 对于每列进行操作

创建一个矩阵

  • 手动创建

    注意:一个维度对应一个中括号!

    1. 一维矩阵
      a = np.array([0, 1, 2, 3, 4])
      
    2. 多维矩阵
      a = np.array([[11, 12, 13, 14, 15],
           [16, 17, 18, 19, 20],
           [21, 22, 23, 24, 25],
           [26, 27, 28 ,29, 30],
           [31, 32, 33, 34, 35]])
      
  • 自动创建
    1. arange()

      	a = np.arange(5)		#>>>0 1 2 3 4
      	b = np.arang(0,100,10)	#>>> 0 10 20 30 40 50 60 70 80 90
      

      · 若只填一个数字n,会生成 [0,n) 的一个一维矩阵
      · 或者可以(起始数字,结束数字,步长),回传每一步的首位置

    2. random.random()

      	a = np.random.random()	# 生成一个数字
      	b = np.random.random((2,3) )  #生成一个2行3列的矩阵
      

      · 什么都不填写回传[-1,1]
      · 可以传数组大小生成相对应的大小

    3. linspace()

      	print(np.linspace(1,3,3) )
      	print(np.linspace(0,3,4) )
      

      在这里插入图片描述

      · (起始值,结束值,分几段)生成等差数列(包括结束值)

    4. zeros()
      生成全部是0的矩阵(可以用于初始化矩阵),默认调用float32,可以使用 dtype = np.int32 来变换

      	a = zeros((3,4), dtype = np.int32)	#生成3*4的矩阵并且为int32型
      
    5. ones()
      与ones一样,生成全部是1的矩阵

      	a = ones((3,4), dtype = np.int32)	
      

访问矩阵

  • 按秩访问
    记住从零开始的原则,对于访问单个元素

    d = a[5,2]	# 取a的5,2元素
    
  • 切片访问
    1.基本切片:

    注意:想好了哪个是x轴,哪个是y轴,z轴k轴的再切

    d = a[:,6]
    e = a[2:4, :]
    f = a[5:6,7:9,:]
    

    2.花式切片
    连用判断的方法切片

    c = a[a >= 50] #只会保存a大于50的
    
  • 通过数组访问
    传入一个bool或者int数组访问
    1.一维矩阵

    equal_ten = a==10
    print(a[equal_ten])	#只输出10
    	
    c = [3,5,106]
    print(a[c]) #把a的第3,5,106输出
    

    2.高维矩阵
    注意有些情况会降维度,看代码

    matrix = numpy.array([
     		   [ 5, 10, 15],
    	   [20, 25, 30],
    	   [35, 40, 45]])
    
    second_column_eq25 = (matrix[:,1] == 25)	#只看一列是不是》》出现降维
    print (matrix[second_column_eq25 ,:1])		#输出的时候要对应
    

矩阵性质

注意:性质没有括号,本质是调用内部变量;函数需要加()

  • shape
    输出矩阵的长宽高的信息

    print(a.shape)
    

    拓展:

    a.shape = (6,3)
    

    通过属性强制修改a矩阵的大小

  • dtype
    返回矩阵的容器类型

    注意: 矩阵的全部容器完全一样,并且会找最通用的解决(双浮点,string类)

    print(a.dtype)
    
  • size
    返回元素总数

    print(a.size)
    
  • ndim
    返回维度

    print(a.ndim)
    
  • T
    返回横纵坐标交换的矩阵

    print(a.T)
    

矩阵符号操作

  • 判断
    回传跟矩阵一样大的bool矩阵

  • 加法
    1.矩阵加矩阵:对应项加对应项
    2.矩阵加数字:全部都加这个数字

  • 减法
    类似加法,不再赘述

  • 乘法
    使用符号的时候是对应项乘对应项

  • or、and、xor
    对应项和对应项经行运算

矩阵数学函数

  • min()和max()
    获得最大值

    print(a.min())
    print(a.max())
    
  • sum()
    获得所有元素之和,或者传入axis的参数(1对应每行,0对应每列)

    print(a.sum()print(a.sum(axis=0)print(a.sum(axis=1)
  • cumsum()
    获得累积到某个位置的值

    a = np.arange(10)
    print(a.cumsum())		 # >>>[ 0  1  3  6 10 15 21 28 36 45]
    

    也可以传入axis参数

  • 基础数学部分

    https://blog.csdn.net/brucewong0516/article/details/79186176

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • floor()和cell()
    一个向下取整一个向上取整

  • np.dot()

  • np.dot()
    矩阵点乘法!

    https://blog.csdn.net/like4501/article/details/79753346

    在这里插入图片描述

    所以相乘的两个矩阵必须是 xy 和 yx
    若a dot* b,那么对于结果矩阵(x,y)的值代表a的第x行的所有值分别乘以b的第y列的所有值的和,即:
    横坐标A的行,纵坐标B的列

    a = np.array([
            [1,1],
            [0,1]
    ])
    
    b = np.array([
            [2,0],
            [3,4]
    ])
    
    
    print(a*b)
    print(np.dot(a,b))
    

在这里插入图片描述

其他函数

  • astype()
    强制改变类型

    	vector = vector.astype(float)
    
  • reshape():
    传进去大小参数,调整array的大小,请注意,大小参数的元素数量必须等于之前array的数量

    	a = np.arange(30).reshape(3,5,2)
    	print(a)
    
  • ravel()
    返回高维矩阵的一维形式,全部展开

    a.ravel()
    
  • copy()
    复制的时候必须使用这个语句复制!!!!

    b = a.copy()
    # b此时是新建了一个内存空间存的与a一样大小的值
    
  • sort()
    排序,可以传入axis参数

    b = a.sort()
    b = a.sort(axis=1)
    
  • argsort()
    把从小到大的标号列出来

    b = a.argsort()
    b = a.argsort(axis=1)
    
  • argmax()
    查找最大值的下标

  • hstack(),vstack(),hsplit(), vsplit()
    对于h开头的,表示变化水平
    对于v开头的,表示变化高度
    在这里插入图片描述
    在这里插入图片描述

  • where()
    没有完全掌握,不多说!

猜你喜欢

转载自blog.csdn.net/ohh_haolin/article/details/86181886
今日推荐