• 矩阵相关计算-基础


    #
    import numpy as np #引入numpy库
    import numpy.linalg as lg  ##导入numpy.linalg 求矩阵的逆
    
    ##创建矩阵
    #创建一维narray对象
    narray_1d = np.array([1,2,3,4,5])
    #创建二维narray对象
    narray_2d = np.array([[1,2,3,4,5],[6,7,8,9,10]])
    #创建三维方阵
    narray_3d = np.array([[1,2,3],[4,5,6],[7,8,9]])
    
    ##通过arange() 函数创建矩阵
    b1 = np.arange(10) #默认从0开始到10(不包括10),默认步长1 [0 1 2 3 4 5 6 7 8 9]
    b2 = np.arange(5,10) #从5开始到10 ,默认步长1 [5 6 7 8 9]
    b3 = np.arange(5,20,2) #从5到20,步长2 [ 5  7  9 11 13 15 17 19]
    print(b1)
    print(b2)
    print(b3)
    ##linspace()创建等差数列(线性等分向量)
    c = np.linspace(0,10,5)#生成首位是0,末位是10,含5个数的等差数列[ 0.   2.5  5.   7.5 10. ]
    print(c)
    
    ##logspace()创建等比数列  以10为底,(起始次方,终止次方,创建个数)
    d = np.logspace(0,2,5)  #[  1.           3.16227766  10.          31.6227766  100.        ]
    print(d)
    
    ##ones创建全是1的矩阵
    e1 = np.ones((3,4))
    print(e1)
    '''
    [[1. 1. 1. 1.]
     [1. 1. 1. 1.]
     [1. 1. 1. 1.]]
     '''
    ##zeros创建全是0的矩阵
    e2 = np.zeros((3,4))
    print(e2)
    '''
    [[0. 0. 0. 0.]
     [0. 0. 0. 0.]
     [0. 0. 0. 0.]]
     '''
    ##eye创建单位矩阵
    e3 = np.eye(3)
    print(e3)
    '''
    [[1. 0. 0.]
     [0. 1. 0.]
     [0. 0. 1.]]
     '''
    ##empty创建空矩阵(实际有值)
    e_empty = np.empty((3,4))
    print(e_empty)
    '''
    [[0. 0. 0. 0.]
     [0. 0. 0. 0.]
     [0. 0. 0. 0.]]
     '''
    
    ##fromstring()方法可以将字符串转化成ndarray对象,获得字符串的ASCII序列
    # str = 'abdcf'
    # str_array = np.fromstring(str,dtype=np.int8) #因为一个字符8位,所以指定dtype=np.int8
    # print(str_array) #[ 97  98 100  99 102]
    
    ##fromfunctin()根据矩阵的行号列号生成矩阵元素
    def func(i,j):
        return i+j
    fr_func_array = np.fromfunction(func,(5,6))
    print(fr_func_array)
    '''
    [[0. 1. 2. 3. 4. 5.]
     [1. 2. 3. 4. 5. 6.]
     [2. 3. 4. 5. 6. 7.]
     [3. 4. 5. 6. 7. 8.]
     [4. 5. 6. 7. 8. 9.]]
     '''
    
    
    
    
    ##获取矩阵的行数列数
    print(narray_3d.shape) #结果返回一个tuple (3, 3)
    ##获取行数
    print(narray_3d.shape[0]) #返回行数 3
    print(narray_3d.shape[1]) #返回列数 3
    
    ##矩阵截取
    #截取第一行
    print(narray_3d[0:1]) #[[1 2 3]]
    #截取第二行,第二,三列
    print(narray_3d[1,1:3])
    #截取第二行
    print(narray_3d[1,:])
    
    #按条件截取
    #截取矩阵中大于2的元素,返回一维数组
    print(narray_3d[narray_3d>2]) #[3 4 5 6 7 8 9]
    #布尔语句首先生成布尔矩阵,将布尔矩阵传入[]实现截取
    print(narray_3d>3)
    '''
    [[False False False]
     [ True  True  True]
     [ True  True  True]]'''
    
    #满足条件就替换
    narray_3d[narray_3d>3] = 10
    print(narray_3d)
    '''
    [[ 1  2  3]
     [10 10 10]
     [10 10 10]]'''
    
    #矩阵的合并,以列表或元祖形式传入
    a1 = np.array([[1,2],[3,4]])
    a2 = np.array([[5,6],[7,8]])
    #横向合并
    print(np.hstack([a1,a2]))
    '''
    [[1 2 5 6]
     [3 4 7 8]]
     '''
    #纵向合并
    print(np.vstack([a1,a2]))
    '''
    [[1 2]
     [3 4]
     [5 6]
     [7 8]]
     '''
    
    
    
    
    ##矩阵的运算
    #对应元素操作 相加+ 相减- 相乘* 相除/  相除取余% 每个元素次方**
    
    ##常见矩阵函数
    #对每个元素操作 三角函数:
    #np.sin(a)  np.cos(a) np.tan(a)  np.arcsin(a)  np.arccos(a)  np.arctan(a)
    ##每个元素取指数函数  np.exp(a)
    ##每个元素开根号 np.sqrt(a)
    
    ##当矩阵元素不在定义与范围时:RuntimeWarning   结果为nan(not a number)
    
    
    ##矩阵运算
    #1.矩阵乘法(点乘)
    g1 = np.array([[1,2,3],[4,5,6]])
    g2 = np.array([[1,2],[3,4],[5,6]])
    print(g1.shape[1]==g2.shape[0]) ##True,满足矩阵乘法条件
    #矩阵点乘np.dot()
    print(g1.dot(g2))
    '''
    True
    [[22 28]
     [49 64]]
    '''
    #矩阵转置np.transpose()
    print(g1.transpose())
    '''
    [[1 4]
     [2 5]
     [3 6]]
    '''
    #简单方法
    print(g1.T)
    '''
    [[1 4]
     [2 5]
     [3 6]]
    '''
    
    
    #矩阵的逆 需先导入numpy.linalg  用linalg的inv函数来求逆
    求逆条件,行数=列数
    
    mitr1 = np.array([[0,1,1],[1,1,1],[1,1,0]])
    #求逆
    print(lg.inv(mitr1))
    '''
    [[-1.  1.  0.]
     [ 1. -1.  1.]
     [-0.  1. -1.]]
    '''
    #奇异矩阵无法求逆
    mitr2 = np.array([[0,1,1],[1,1,1],[1,0,0]]) #奇异矩阵:Singular matrix
    print(lg.inv(mitr2))
    ##初等行变换不能将矩阵化成单位矩阵
    '''
    [[1.  0.  0.  0.  0.  1.]
     [0.  1.  1.  0.  1. -1.]
     [0.  0.  0.  1. -1.  1.]]
     '''
    
    ##求解矩阵Ax=b
    A = np.mat('1 1 ;0 1') #生成一个矩阵A
    b = np.array([2,1])
    x = np.linalg.solve(A,b)
    print(A)
    print(b)
    print(x)
    
    ##求矩阵的特征值特征向量eig
    eigvalue,eigvector=np.linalg.eig(A)
    print('特征值:',eigvalue,'特征向量 :',eigvector)
    
    
    ##矩阵信息获取
    ##最大最小值.max() .min()
    B = np.random.random((5,4))
    print(B)
    print('B数组最大元素:',B.max())
    print('B数组最小元素:',B.min())
    print('B数组每列最大元素:',B.max(axis=0))
    print('B数组每行最小元素:',B.min(axis=1))
    print('B数组最大元素所在位置(按行遍历):',B.argmax(axis=1))
    
    ##矩阵中元素的平均值mean(),也可获得行列的平均值
    print(B.mean())
    print(B.mean(axis=0)) #按列取平均值
    print(B.mean(axis=1)) #按行取平均值
    
    ##矩阵元素的方差函数var(),相当于mean(abs(x-x.mean()**2))
    print(B.var()) #所有元素的方差
    print(B.var(axis=0)) #每列元素的方差
    print(B.var(axis=1)) #每行元素的方差
    
    ##标准差std()   相当于 sqrt(mean(abs(x-x.mean()**2)))  或  sqrt(B.var())
    
    print(B.std()) #所有元素的标准差
    print(B.std(axis=0)) #每列元素的标准差
    print(B.std(axis=1)) #每行元素的标准差
    
    ##中值median():将序列排序,奇数个取中间值,偶数个取中间两值的均值
    print(np.median(B))        #取所有值中值
    print(np.median(B,axis=0)) #沿列方向取中值
    print(np.median(B,axis=1)) #沿行方向取中值
    
    ##求和sum() :对行,列,或整个矩阵求和
    
    print(B.sum()) #对整矩阵求和
    print(B.sum(axis=0)) #对列求和
    print(B.sum(axis=1)) #对行求和
    
    ##累计和sumsum():当前位置之前的所有元素之和。如:[1,2,3,4,5],其累计和为[1,3,6,10,15]
    ##同理可对行列 整个矩阵累积和
    
    print(B.cumsum()) #对整个矩阵累积和
    print(B.cumsum(axis=0)) #列累积和
    print(B.cumsum(axis=1)) #行累积和
    

      参考:https://www.cnblogs.com/smallpi/p/4550361.html

  • 相关阅读:
    改不改,这是一个问题
    连载:面向对象的葵花宝典:思考、技巧与实践(39)
    Oracle压缩总结2— 估计表压缩效应
    CSDN markdown 编辑 第五章 UML
    Arcgis for Javascript之featureLayer图和属性互操作性
    bzoj 2437 [Noi2011]兔子和鸡蛋 [二分图匹配]
    “jquery于each方法和选择”学习笔记
    安卓模拟器错误: Could not open
    软路试--就像一棵树活着
    2014第21周二
  • 原文地址:https://www.cnblogs.com/liuhuacai/p/10950302.html
Copyright © 2020-2023  润新知