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)
  • 相关阅读:
    3、选择排序(最小值/最大值)
    2、冒泡排序
    1、快速排序
    Stream操作
    1. 两数之和
    Mysql修改字段类型修改
    获取节假日
    mysql 前缀 + 编号 补0
    一口气说出 6种@Transactional注解的失效场景
    Activiti最全入门教程(基于Eclipse插件开发)
  • 原文地址:https://www.cnblogs.com/llphhl/p/6052467.html
Copyright © 2011-2022 走看看