zoukankan      html  css  js  c++  java
  • 矩阵

    矩阵

    矩阵有三个主要的用途。第一是解线性方程组,比如二维矩阵可以理解为一个平面直角坐标系内的点集,通过计算点与点之间的距离,完成聚类、分类或预测,类似的运算可以扩展到多维的情况。第二个用途是方程降次,也就是利用矩阵的二次型,通过升维将线性不可分的数据集映射到高维中,转换为线性可分的情形,这是支持向量机的基本原理之一。第三个用途是变换,矩阵可以通过特征值和特征向量完成维度约简,简化类似图片这种高维数据集的运算,主成分分析就是用这个原理。

    在程序设计中,我, 可以把矩阵理解为一个二维数组。以python为例,矩阵就是嵌套若干个list的一个大list。内部的每个list都是等长的,其中每个元素都是整型或浮点型的数值。内部的list就是行向量,即一个对象。

    NumPy数据包提供了专门的矩阵数据结构和线性代数库。

    import numpy as np
    mylist =[1,2,3,4,5]
    length = len(mylist)
    a=10
    for indx in range(length):
        mylist[indx] = a*mylist[indx]
    print (mylist)
    #矢量化编程
    mylist2 =[1,2,3,4,5]
    mymatrix = np.mat(mylist2)
    print(a*mymatrix)

    #矩阵初始化
    myzero = np.zeros([3,5])
    print(myzero)
    myone = np.ones([3,5])
    print(myone)

    myrand = np.random.rand(3,4) #生成0-1之间的随机数矩阵
    print(myrand)

    myeye = np.eye(3) #单位阵
    print(myeye)

    #矩阵元素运算
    from numpy import *
    myones = ones([3,3])
    myeyes = eye(3)

    print(myones + myeyes)
    print(myones - myeyes)
    print(sum(myones))  #所有元素求和
    #矩阵各元素的积
    mymatrix = mat([[1,2,3],[4,5,6],[7,8,9]])
    mymatrix2 = 1.5 * ones([3,3])
    print (multiply(mymatrix,mymatrix2))
    #矩阵各元素的n次幂
    mylist = mat([[1,2,3],[4,5,6],[7,8,9]])
    print(power(mylist,2))
    #矩阵的乘法
    mymatrix2 = mat([[1,2,3],[4,5,6],[7,8,9]])
    mymatrix3 = mat([[1],[2],[3]])
    print(mymatrix2 * mymatrix3)

    #矩阵转置
    print (mymatrix2.T)
    print (mymatrix2.transpose())
    [m,n] = shape(mymatrix2)
    print("矩阵的行列数:",m,n)
    print("按行切片: ",mymatrix2[0])
    print("按列切片: ",mymatrix2.T[0])
    print("矩阵的复制: ",mymatrix2.copy())

    print("矩阵的比较: ",mymatrix2<mymatrix2.T)

    NumPy的Linalg库可以满足大多数的线性代数运算。

    from numpy import *
    print("方阵的行列式: ",linalg.det(mymatrix2))
    print("矩阵的逆:",linalg.inv(mymatrix2))
    At = mymatrix2.T
    print("矩阵的对称: ",mymatrix2*At)
    print("矩阵的秩: ",linalg.matrix_rank(mymatrix2))
    #可逆矩阵求解
    A = mat([[1,2,4,5,7],[9,12,11,8,2],[6,4,3,2,1],[9,1,3,4,5],[0,2,3,4,1]])
    b = [1,0,1,0,1]
    s = linalg.solve(A, mat(b).T)
    print (s)
  • 相关阅读:
    Java8 lambda表达式10个示例
    我和阿里云RDS的故事
    Spring Mvc 传递参数要controller出现了400,日期参数全局处理,格式化yyyy-MM-dd 和yyyy-MM-dd HH:mm:ss
    剑指Offer_36_两个链表的第一个公共结点
    剑指Offer_35_数组中的逆序对
    剑指Offer_34_找出字符串中第一个只出现一次的字符
    剑指Offer_33_丑数
    剑指Offer_32_把数组排成最小的数
    剑指Offer_31_整数中1出现的次数(从1到n整数中1出现的次数)
    剑指Offer_30_连续子数组的最大和
  • 原文地址:https://www.cnblogs.com/llphhl/p/6052467.html
Copyright © 2011-2022 走看看