zoukankan      html  css  js  c++  java
  • Python-01矩阵、数组和列表等的总结

    python的基础知识总结

    使用到了numpy库,所以第一步需要

    import numpy as np

    1.创建矩阵

      1.1一般矩阵的创建

    创建一个二维的矩阵,并使用ndim、shape、size分别获取矩阵的维度,大小,元素个数。

    # 1)创建矩阵
    a1 = np.array([[1,2,3],
                  [2,3,4]])
    print("矩阵a1:
    ",a1)
    print("number of dimension:",a1.ndim)
    print("shape:",a1.shape)
    print('size:',a1.size)
    # matrix 方式创建
    a3 = np.matrix([[1,2,3],
                    [4,5,6]])
    print("a3:
    ",a3)
    # mat方式 
    from numpy import *
    data1 = mat(zeros((3,3)))#创建一个3*3的零矩阵
    data2 = mat(ones( (2,4)) ) #创建一个 全1矩阵
    data3 = mat(random.rand(2,2)) #这里的random模块使用的是numpy中的random模块,random.rand(2,2)创建的是一个二维数组,需要将其转换成#matrix
    data4 = mat(random.randint(10,size=(3,3))) # 10以内的随机3*3 矩阵
    data5 = mat(random.randint(2,8,size=(2,6))) # 产生一个2-8之间随机整数的矩阵
    data6 = mat(eye(2,2,dtype=int)) #产生一个2*2 的对角矩阵
    # 对角矩阵
    b = [1,2,3]
    b1 = mat(diag(b)) # 生成一个对角线为1 2 3 的对角矩阵
    print("对角矩阵为:
    ",b1)
    

      

      1.2特殊矩阵的创建 

    import numpy as np
    
    # 特殊矩阵的创建
    # numpy 的类型 arange有序数列 linspace的使用
    a = np.array([2,3,4],dtype=np.int32)
    print(a.dtype)
    b = np.arange(10,20,2)
    print(b)
    c = np.arange(12).reshape((3,4))
    print(c)
    d1 = np.linspace(1,20,10)
    print(d1)
    d2 = np.linspace(1,20,10).reshape((2,5))
    print(d2)
    
    data1 = np.zeros((3,5))
    print("全零矩阵:
    ",data1)
    data2 = np.ones((3,4),dtype=np.int16)
    print("全一阵:
    ",data2)
    data3 = np.empty((3,4),dtype=np.float32)
    print("empty:
    ",data3)
    

      

    2.矩阵的运算

    # 矩阵的运算
    print("# 矩阵的运算:")
    c1 = mat([1,2,3])
    c2 = mat([[1],[2],[3]])
    c3 = c1*c2
    print("矩阵乘运算结果:",c3)
    
    c4 = multiply(c1,c2)
    print("矩阵对应元素相乘:
    ",c4)
    c5 = c1 * 2
    print("矩阵扩大多少倍:",c5)
    
    # 矩阵的逆 转置
    print("# matrix 求逆:")
    d1 =mat(eye(2,2)*0.5)
    d2 = d1.I #求矩阵得逆矩阵
    print("矩阵的逆矩阵为:
    ",d2)
    d3 = d1.T
    print("矩阵的转置:
    ",d3)
    # 矩阵的每一列、行的和
    d4 = mat([[1,1],[2,3],[4,2]])
    d5 = d4.sum(axis=0)   #列求和
    d6 = d4.sum(axis=1)  #行求和
    print("列求和:
    ",d5)
    print("行求和:
    ",d6)
    d7 = sum(d4[1,:]) #计算第一行所有列之和
    d8 = sum(d4[:,1])# 矩阵行数 0 1 2行  列数 0 1 列
    print("注意d4矩阵:",d7) # 2+3=5
    print("注意d4矩阵:",d8) # 1+3+2=6
    
    # 计算最大值和最小值 和索引
    d9 = d4.max()
    print("d4 matrix max:",d9)
    d10 = max(d4[:,1]) #计算第二列的最大值
    print("第二列最大值:",d10)  #此方法得到的是矩阵
    d11 = d4[1,:].max()
    print("第二列最大值:",d11)  # this way calclulate a number
    d12 = np.max(d4,0) #计算所有列的最大值
    print("所有列的最大值:",d12)
    d13 =np.max(d4,1) #计算所有行的最大值
    print("所有行的最大值:
    ",d13)
    d14 = np.argmax(d4,0) #计算所有列的最大值对应的索引
    print("所有列最大值对应的索引:
    ",d14)
    d15 = np.argmax(d4[1,:]) #
    print("第二行最大值对应改行的索引:",d15)
    
    e1 = mat([[1,2,3],[4,5,6],[7,8,9]])
    e2 = e1[1:,1:] #分割出矩阵第二行,第二列以后的元素
    print("矩阵的分割:
    ",e2)
    
    e3 = mat(ones((2,2)))
    e4 = mat(eye(2))
    e5 = vstack((e3,e4))  #按列合并,增加了行数
    print("矩阵列合并:
    ",e5)
    e6 = hstack((e3,e4))
    print("矩阵的行合并:
    ",e6)
    
    f1 = [[1],'hello',3]
    
    f2 = array([[1,2,3],[2,3,4]])
    dimension = f2.ndim
    m,n = f2.shape
    number = f2.size #元素总数
    str = f2.dtype #元素的类型
    print("矩阵的维数:",dimension)
    print("矩阵的行数和列数:",m,n)
    print("矩阵元素总个数:",number)
    print("元素的类型:",str)
    

    3 矩阵、列表、数组之间转换

    g1 = [[1,2],[3,2],[4,5]]  #列表
    g2 = array(g1)  #将列表转化为二维数组
    g3 = mat(g1) #将列表转化为矩阵
    g4 = array(g3) #将矩阵转化为数组
    g41 = g3.getA() #将矩阵转化为数组
    g5 = g3.tolist() #将矩阵转化为列表
    g6 = g2.tolist() #将数组转化为列表
    print("列表:",g1)
    print("数组:",g2)
    print("矩阵:",g3)
    print("矩阵转为数组:",g4)
    print("矩阵转为数组:",g41)
    print("矩阵转化为列表:",g5)
    print("数组转化为列表:",g6)
    

      

  • 相关阅读:
    【算法学习笔记】76.DFS 回溯检测 SJTU OJ 1229 mine
    【算法学习笔记】75. 动态规划 棋盘型 期望计算 1390 畅畅的牙签盒(改)
    【算法学习笔记】74. 枚举 状态压缩 填充方案 SJTU OJ 1391 畅畅的牙签袋(改)
    【算法学习笔记】73.数学规律题 SJTU OJ 1058 小M的机器人
    【算法学习笔记】72.LCS 最大公公子序列 动态规划 SJTU OJ 1065 小M的生物实验1
    【算法学习笔记】71.动态规划 双重条件 SJTU OJ 1124 我把助教团的平均智商拉低了
    【算法学习笔记】70.回文序列 动态规划 SJTU OJ 1066 小M家的牛们
    【算法学习笔记】69. 枚举法 字典序处理 SJTU OJ 1047 The Clocks
    【算法学习笔记】68.枚举 SJTU OJ 1272 写数游戏
    【算法学习笔记】67.状态压缩 DP SJTU OJ 1383 畅畅的牙签袋
  • 原文地址:https://www.cnblogs.com/yumoz/p/13278740.html
Copyright © 2011-2022 走看看