zoukankan      html  css  js  c++  java
  • 矩阵NumPy

    安装:  pip install numpy   

        pip install numpy -i https://pypi.douban.com/simple      豆瓣镜像下载

    常量:

    np.pi  π

    创建矩阵数组

     1 import numpy as np
     2 # array=np.array([[1,2,3],[5,6,7]])  #定义一个2行3列的矩阵数组.2行=2维
     3 # print(array.ndim) #返回矩阵数组的维数
     4 # print(array.shape) #返回矩阵数组的维数和列数。(2, 3)
     5 # print(array.size)  #返回矩阵数组的元素总个数
     6 #
     7 # array1=np.array([[1,2,3],[5,6,7]],dtype=np.int)  #定义一个矩阵数组
     8 # #dtype   指定每个元素的数据类型     可选
     9 # print(array1.dtype)  #返回元素的数据类型。int32
    10 # array2=np.zeros((3,4)) #定义一个元素值都是0,3行4列的矩阵数组
    11 # print(array2)
    12 # array3=np.ones((3,4))  #定义一个元素值都是1,3行4列的矩阵数组
    #参数2 可选
    dtype="uint8" 指定每个数据的类型,默认浮点型
    13 # print(array3)
    14 #array4=np.empty((3,4))  #定义一个元素值都是空,3行4列的矩阵数组
    15 #空  值非常接近0    6.23042070e-307
    16 #print(array4)
    17 #array5=np.arange(10,20,2)  #定义一个一维n列矩阵数组
    18 #参数1 参数2 数据范围
    19 # 参数3  步长值     [10 12 14 16 18]
    20 #print(array5)
    21 # array6=np.arange(10,33,2).reshape((3,4))  #定义一个3行4列的有序矩阵数组
    22 # print(array6)
    23 #array7=np.linspace(1,10,5) #定义一个一维数组
    24 #元素值是:在1到10之间平均分成5个点。注意包括10
    25 #[ 1.    3.25  5.5   7.75 10.  ]
    26 #print(array7)
    27 array8=np.linspace(1,10,6).reshape((2,3))  #定义一个2行3列的矩阵数组
    28 print(array8)

    i=np.zeros([4,6,3],np.uint8)      #元素值都是0,产生4个表,每个表是6行3列      np.uint8是数据类型

    np.random.rand()     返回一个或一组服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1),不包括1

    矩阵数组的运算:

    矩阵乘法:

    只有在第一个矩阵的列数和第二个矩阵的行数相同时才有意义

      1 import numpy as np
      2 a=np.array([1,2,3,4])
      3 b=np.arange(10,17,2)
      4 x=np.array([[1,2],[10,20]])
      5 y=np.arange(10,17,2).reshape((2,2))
      6 z=np.array([[1,2,3],[10,20,30]])
      7 c=a-b  #两个矩阵数组对应元素分别进行计算
      8 c=a**2
      9 c=np.sin(a)
     10 c=a<3  #[ True  True False False]
     11 c=x*y  #两个矩阵数组对应元素分别进行计算
     12 d=np.dot(x,y) #矩阵乘法[看上面的图]
     13 d=x.dot(y)  #矩阵乘法
     14 
     15 c=np.random.random((2,3))  #产生一个2行3列的随机数矩阵
     16 #每个元素的随机数在0到1之间
     17 c=np.min(x) #找出最小元素的值
     18 c=np.max(x)  #找出最大元素的值
     19 c=np.sum(z,axis=1)  #每一行求和  [ 6 60]
     20 c=np.sum(z,axis=0)  #每一列求和.[11 22 33]
     21 c=np.argmin(a) #最小值的索引
     22 c=np.argmax(z) #最大值的索引
     23 c=np.average(z)   #求全部元素的平均值
     24 c=np.median(z) #找出中位数
     25 #中位数:将数据按照从小到大或从大到小的顺序排列,如果数据个数是奇数,则处于最中间位置的数就是这组数据的中位数;如果数据的个数是偶数,则中间两个数据的平均数是这组数据的中位数
     26 c=np.cumsum(z)  #返回各元素与前面元素累加后的一维矩阵。[ 1  3  6 16 36 66]
     27 z=np.array([[100,2,3],[10,20,30]])
     28 c=np.diff(z)  #各维 后列减去前列后 的矩阵。[[-98   1]   [ 10  10]]
     29 z=np.array([[100,0,3],[10,20,30]])
     30 c=np.nonzero(z)  #找出非0元素的位置
     31 #(array([0, 0, 1, 1, 1], dtype=int64), array([0, 2, 0, 1, 2], dtype=int64))
     32 #第一个数组是非0元素的行索引,第二个数组是非0元素的列索引
     33 d=np.transpose(c)  #通过行列转换,返回相应的位置矩阵。[[0 0] [0 2] [1 0] [1 1] [1 2]]
     34 # 注意参数c的值
     35 d=z[c]  #找出相应位置元素的一维矩阵。[100   3  10  20  30]
     36 #注意参数c的值  c是位置元组
     37 c=np.sort(z) #对各维分别进行排序-升序。[[  0   3 100] [ 10  20  30]]
     38 z=np.array([[100,2,3,50],[10,20,30,15],[35,86,74,14]])
     39 c=np.transpose(z)  #行列转换,行变成列,列变成行
     40 # [[100  10] [  0  20] [  3  30]]
     41 c=z.T  #与np.transpose(z)相同
     42 c=np.clip(z,5,9)#矩阵z中小于5的元素都等于5,大于9的元素都等于9
     43 #参数2  最小值;参数3 最大值
     44 z=np.array([[10,2,3,50],[10,20,30,15]])
     45 c=np.mean(z)   #求所有元素的平均值
     46 c=z.mean()     #求所有元素的平均值
     47 c=np.mean(z,axis=1)  #各行求平均值。[16.25 18.75]
     48 c=np.mean(z,axis=0)  #各列求平均值。[10.  11.  16.5 32.5]
     49 c=a[1]  #返回一维矩阵索引号对应的值.3
     50 c=z[1]  #多维矩阵就返回行索引对应的矩阵。[10 20 30 15]
     51 c=z[1][1]  #返回第一行第一列的值
     52 c=z[1,1]   #返回第一行第一列的值
     53 c=z[1,:]  #返回第一行的所有元素。[10 20 30 15]
     54 # : 代表所有
     55 c=z[:,1] #返回第一列的所有元素。[ 2 20]
     56 c=z[1,1:3] #返回第一行的1到3的元素
     57 #注意  顾头不顾尾
     58 c=z[0:1,1]  #返回第一列的0到1的元素
     59 z=np.array([[10,2,3,50],[10,20,30,15],[100,500,200,800]])
     60 for r in z: #每次返回一行
     61     #print(r)
     62     pass
     63 for r in z.T: #每次返回一列
     64     #print(r)
     65     pass
     66 c=z.flat  #把矩阵转换成一维迭代器
     67 c=z.flatten()  #把矩阵转换成一维矩阵
     68 for i in z.flat: #每次返回一个元素
     69     #print(i)
     70     pass
     71 a=np.array([[1,2,3,4],[60,20,90,10]])
     72 b=np.array([[500,200,800,444],[2,2,2,2]])
     73 c=a.shape  #返回多维矩阵的行数和列数。(2, 4)
     74 c=b.shape  #返回一维矩阵的列数.(4,)
     75 c=np.vstack((a,b))  #合拼成一个矩阵
     76 #以行为单位,按行顺序排列
     77 c=np.hstack((a,b))  #合拼成一个矩阵
     78 #以行为单位,按列顺序排列
     79 x=np.array([3,8,4,9])
     80 y=np.array([[5,6,7,8],[10,30,90,50],[500,200,800,444]])
     81 c=y[:,np.newaxis] #多维给每行加一层行嵌套
     82 c=x[:,np.newaxis]  #一维给每个元素加一层行嵌套。一行n列变成n行1列
     83 c=x[np.newaxis,:]
     84 d=y[np.newaxis,:]  #给矩阵加一个行总嵌套
     85 x=np.array([[3,8,4,9],[500,200,800,444]])
     86 y=np.array([[5,6,7,8],[10,30,90,50]])
     87 c=np.concatenate((x,y,x),axis=0)  #合拼成一个矩阵
     88 #以行为单位,按行顺序排列
     89 c=np.concatenate((x,y,x),axis=1)  #合拼成一个矩阵
     90 #以行为单位,把每列合拼成一行
     91 y=np.array([[5,6,7,8],[10,30,90,50],[500,200,800,444],[1,2,3,4]])
     92 c=np.split(y,2,axis=0) #分割矩阵【必须均等分】
     93 #把矩阵分层2个
     94 #axis=0  以行分割;
     95 # axis=1  以列分割   [array([[  5,   6],[ 10,  30],[500, 200],[  1,   2]]), array([[  7,   8],[ 90,  50],[800, 444],[  3,   4]])]
     96 c=np.split(y,2,axis=1)
     97 c=np.array_split(y,3,axis=0) #分割矩阵【可以不均等分】
     98 c=np.vsplit(y,2)  #跟np.split(y,2,axis=0)相同
     99 c=np.hsplit(y,2)  #跟np.split(y,2,axis=1)相同
    100 a=np.arange(4)
    101 b=a  #把a的地址给b
    102 c=a
    103 d=b
    104 a[0]=11  #修改某元素的数据【注意 数据的类型】
    105 a[1:3]=[22,33]  #修改第一项到第三项的数据。顾头不顾尾
    106 e=b is a
    107 b=a.copy() #把a的值给b
    108 a[0]=100
    109 print(a)
    110 print(b)
    111 
    112 print(id(a),id(b))

    排序:

     1 import numpy as np
     2 z=np.array([[100,0,3],[10,20,30]])
     3 c=np.sort(z,axis=1) #对各维分别进行排序-升序。[[  0   3 100] [ 10  20  30]]
     4 print(c)
     5 c=np.sort(z,axis=0)  #对各列分别进行排序-升序  [[ 10   0   3] [100  20  30]]
     6 c=np.argsort(z,axis=1) #返回 各维按升序排序所处的位置。[[1 2 0] [0 1 2]]
     7 c=np.argsort(z,axis=0) #返回 各列按升序排序所处的位置。[[1 0 0] [0 1 1]]
     8 a=[1,5,1,4,3,4,4]
     9 b=[9,4,0,4,0,2,1]
    10 c=np.lexsort((b,a))

    s=q[:-1]   去掉最后一个数据

    q = np.arange(36)

    s = q.reshape(6,6) #更改数组形状,变成6行6列

    s = q.reshape(6,3,2) #更改数组形状
    #总的分层6块,每块3行2列

    s = q.reshape(-1,3,2)  #更改数组形状
    # -1表示不知-自动处理,每块3行2列

    arr2[::2,::2]   #设置步长为2

    e=np.any(s) == True #s数据表中只要有一个数据是True就返回True
    e=np.all(s) == True #s数据表中所有数据都是True就返回True

    import numpy as np
    
    a=np.array([[1,2,3],[5,6,7]])  #定义一个2行3列的矩阵数组
    b=np.array([[10,20,30],[50,60,70]])
    
    x=np.c_[a, b]   #把a、b矩阵的各对应行连接在一起
    #行数不变,列数增加
    print(a) print(b) print(x)

    效果图:

    import numpy as np
    
    a=np.array([[1,2,3],[5,6,7]])  #定义一个2行3列的矩阵数组
    b=np.array([[10,20,30],[50,60,70]])
    
    x=np.r_[a, b]   #把a、b矩阵连接在一起
    #行数增加,列数不变
    
    print(a)
    print(b)
    print(x)

    效果图:

  • 相关阅读:
    新的一天,新的一周
    mysql重启失败,报错:starting mysql。 the server quit without updating pid file (/[failed]l/mysql/data/hostname.pid])
    rpm包安装、配置与卸载
    python高效运用(十)———文件(File)、输入输出的基本操作
    paramiko--------远程服务器连接工具
    main
    thread同步测试
    实验二测试
    《信息安全系统设计与实现》学习笔记9
    实验二 OpenSSL API使用
  • 原文地址:https://www.cnblogs.com/liming19680104/p/10459590.html
Copyright © 2011-2022 走看看