• numpy模块


    numpy模块

    numpy是Python的一种开源的数据计算扩展库,用来存储和处理大型矩阵

    1. 区别于list列表,提供数组操作,数组运算,以及统计分布和简单的数学模型

    2. 计算速度快

    矩阵即numpy的ndarray对象,创建矩阵就是把一个列表传入np.array()方法

    import numpy as np #约定俗成 np代表numpy

    #一维
    arr = np.array([1,2,3,4])
    print(arr)
    [1,2,3,4]

    #二维
    arr = np.array([[1,2,3,4],[5,6,7,8]])
    [[1,2,3,4]
    [5,6,7,8]]

    #三维
    [[[1,2,3,4],
    [1,2,3,4],
    [1,2,3,4]],

    [[2,3,4,5],
    [3,4,5,6],
    [3,4,5,6]],

    [[5,6,7,8],
    [5,6,7,8],
    [5,6,7,8]]]


    arr = [[1,2,3]
          [4,5,6]]
    #获取矩阵的行和列
    print(arr.shape)
    (2,3)

    #获取矩阵的行

    print(arr.shape[0])
    2


    # 获取矩阵的列
    print(arr.shape[1])
    3

    切割矩阵

    # 取所有元素
    print(arr[:,:])


    # 取第一行所有元素
    print(arr[:1,:])

    print(arr[0,[0,1,2,3,....(n个数则n-1)]])

    # 取第一列所有元素

    print(arr[:,:1])

    print(arr[[0,1,2,3,..],0])

    # 取第一行第一列的元素
    print(arr[0,0])

    #取大于5的元素,返回一个数组
    print(arr[arr > 5])

    #生成布尔矩阵
    print(arr > 5)
    [[False False False]
    [True  False True ]]

    矩阵元素替换

    类似于列表的替换


    # 取第一行所有元素变为0
    arr1 = arr.copy()
    arr1[:1,:] = 0
    print(arr1)

    # 去所有大于5的元素变为0
    arr2 = arr.copy()
    arr2[arr >5] = 0
    print(arr2)


    #对矩阵清零
    arr3 = arr.copy()
    arr3[:,:] = 0
    print(arr3)

    矩阵的合并

    arr1 = [[1,2]
          [3,4]]

    arr2 = [[5,6]
          [7,8]]

    # 合并矩阵的行,用hstack的合并的话 会具有相同的行
    #方法1
    np.hstack((arr1,arr2))
    [[1,2,5,6]
    [3,4,7,8]]

    #方法2
    print(np.concatenate((arr1,arr2),axis=1))
    [[1,2,5,6]
    [3,4,7,8]]

    # 合并矩阵的列,用vstack
    #方法1
    np.vstack((arr1,arr2))
    [[1,2]
    [3,4]
    [5,6]
    [7,8]]

    # 方法2
    print(np.contatenate((arr1,arr2),axis=0))



    通过函数创建矩阵

    arange

    print(np.arange(10))#0-9数组
    [0 1 2 3 4 5 6 7 8 9]

    print(np.arange(1,5))#1-4数组
    [1 2 3 4]

    print(np.arange(1,20,2))#1-19,步长为2的数组
    [1 3 5 7 9 11 13 15 17 19]

    linspace/logspace
    #构造一个等差数列,取头也取尾
    np.linspace(0,20,5)
    [0.5.10.15.20]

    #构造一个等比数列,从10**0取到10**20,取5个数
    np.logspace(0,20,5)
    [ 1.00000e+00   1.00000e+05  1.00000e+10  1.00000e+15  1.00000e+20]

    zero/ones/eye/empty

    #构造全0矩阵
    np.zeros((3,4))
    [[0. 0. 0. 0.]
    [0. 0. 0. 0.]
    [0. 0. 0. 0.]]

    #构造全1矩阵
    np.ones((X,Y))

    #构造N个主元的单位矩阵
    np.eye(n)
    #例
    [[1. 0. 0.]
    [0. 1. 0.]
    [0. 0. 1.]]

    #构造一个随机矩阵,里面元素为随机生成
    np.empty((x,y))

    # fromstring通过对字符串的字符编码所对应ASCII编码的位置,生成一个ndarray对象
    s = 'abcdef'
    # np.int8表示一个字符的字节数为8
    print(np.fromstring(s, dtype=np.int8))
    [ 97  98  99 100 101 102]



    def func(i, j):
       """其中i为矩阵的行,j为矩阵的列"""
       return i*j


    # 使用函数对矩阵元素的行和列的索引做处理,得到当前元素的值,索引从0开始,并构造一个3*4的矩阵
    print(np.fromfunction(func, (3, 4)))

    [[ 0.  0.  0.  0.]
    [ 0.  1.  2.  3.]
    [ 0.  2.  4.  6.]]


     

    矩阵的运算

    + - * / % **n

    矩阵的点乘

    必须满足第一个矩阵的列 = 第二个矩阵的行

     

    arr1 = np.array([[1, 2, 3],  [4, 5, 6]])
    print(arr1.shape)
    (2, 3)

    arr2 = np.array([[7, 8], [9, 10], [11, 12]])
    print(arr2.shape)
    (3, 2)

    assert arr1.shape[0] == arr2.shape[1]
    # 2*3·3*2 = 2*2

    print(arr1.dot(arr2))
    [[ 58  64]
    [139 154]]

     

    矩阵的转置

    相当于矩阵的行和列呼唤



    arr = np.array([[1, 2, 3], [4, 5, 6]])
    print(arr)
    [[1 2 3]
    [4 5 6]]


    print(arr.transpose())
    [[1 4]
    [2 5]
    [3 6]]


    print(arr.T)
    [[1 4]
    [2 5]
    [3 6]]

    矩阵的逆

    矩阵行和列相同时候才可逆

    arr = np.array([[1, 2, 3],  [4, 5, 6], [7, 8, 9]])
    print(arr)
    [[1 2 3]
    [4 5 6]
    [7 8 9]]

    print(np.linalg.inv(arr))
    [[ 3.15251974e+15 -6.30503948e+15   3.15251974e+15]
    [ -6.30503948e+15   1.26100790e+16 -6.30503948e+15]
    [ 3.15251974e+15 -6.30503948e+15   3.15251974e+15]]



    # 单位矩阵的逆是单位矩阵本身
    arr = np.eye(3)
    print(arr)
    [[ 1. 0. 0.]
    [ 0. 1. 0.]
    [ 0. 0. 1.]]

    print(np.linalg.inv(arr))
    [[ 1. 0. 0.]
    [ 0. 1. 0.]
    [ 0. 0. 1.]]

     

  • 相关阅读:
    树形DP 统计树中长度为K的路径数量——Distance in Tree
    Linux下使用Vi是方向键变乱码 退格键不能使用的解决方法
    wikioi 1029 中序遍历总数
    struts2前端页面读取Clob/BLOB
    hdu 1712 ACboy needs your help
    HDU 2489 Minimal Ratio Tree (dfs+Prim最小生成树)
    用XMLRPC开服务进行server/client通信
    HDU 1171 Big Event in HDU
    VS2012调试执行,网页打不开
    解决安装OpenShift Client Tools时提示的dl/import (LoadError)问题
  • 原文地址:https://www.cnblogs.com/zrx19960128/p/11052279.html
Copyright © 2020-2023  润新知