zoukankan      html  css  js  c++  java
  • numpy 笔记

    1  矩阵、数组、列表

    #from numpy import *
    import numpy as np

      矩阵创建

    >>> A = np.array([1,2,3])
    array([1, 2, 3])
    >>> A = np.mat(A)
    matrix([[1, 2, 3]])
    >>> np.shape(A)
    (1, 3)
    >>> B = np.matrix([1,2,3])
    >>> np.shape(b)
    (1, 3)
    
    # 基本属性
    >>>A = np.array([[2],[1]])
    >>>A.ndim      #维度  dimension = 2
    >>>m,n = A.shape        #m=2, n=1
    >>>number = A.size      #元素总数 = 2
    >>>A.dtype         #元素类型  dtype('int64')
    >>>A.itemsize         #字节大小 = 8
    >>>A.reshape(1,2)       #重构
    >>>np.resize(A, (1,2))    #重构
    

      常用数组,快速创建 

    >>>np.zeros((3,3))     #零矩阵,参数是一个tuple类型(3,3)
    >>>np.ones((2,4))      #1矩阵,默认浮点型,可以使用dtype=int
    >>>np.random.rand(2,2)     #随机阵
    >>>np.random.randint(10,size=(3,3))   #0-10之间的随机整数矩阵 
    >>>np.random.randint(2,8,size=(2,5))  #2-8之间的随机整数矩阵
    >>>np.eye(2,2,dtype=int)   #单位阵, n=行,M=列,k=对角索引 
    >>>np.diag([1,2,3])            #对角阵 
    >>>np.identity(5)                #单位阵
    >>>np.linspace(10,20,  5, endpoint =  False)        #等差数列   array([10., 12., 14., 16., 18.])
    >>>np.logspace(1, 4, num=10,  base=2)            #等比数列   array([2.,  4.,  8., 16.])
    >>>np.empty(A.shape)
    >>>np.empty([3,2], dtype =  int)        #空数组
    array([[         0, 1072168960],
           [         0, 1072168960],
           [         0,          0]])
    

      数组操作

    >>>A = np.arange(12, dtype = np.int8).reshape(3,4)
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]], dtype=int8)
    >>>B = np.array([np.nan, 1, 2, np.nan, 3, 4, 5])
    array([nan, 1., 2., nan, 3., 4., 5.])
    
    # 索引
    >>>A[[0,2],[3,1]]                 #array([3, 9])
    >>>np.arange(10)[2:7:2]      #array([2, 4, 6])
    >>>A[A>5]         #array([ 6,  7,  8,  9, 10, 11], dtype=int8)
    >>>B[~np.isnan(B)]     #判断缺失,缺失也可用None表示,np.iscomplex() 判断复数
    array([1., 2., 3., 4., 5.])
    
    # 展开
    >>>A.flatten()     #展开,返回副本
    array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11], dtype=int8)
    >>>A.ravel()       #展开,按需返回副本
    array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11], dtype=int8)
    
    # 广播 / 压缩
    # 不同维度数据运算时,维度自动扩充,并按该维度第一个元素带入运算
    >>>x = np.array([[1], [2], [3]])
    >>>y = np.array([4, 5, 6]) 
    >>>[u + v for (u,v) in np.broadcast(x,y)]
    [5, 6, 7, 6, 7, 8, 7, 8, 9]
    >>>x+y
    array([[5, 6, 7],
           [6, 7, 8],
           [7, 8, 9]])
    >>>np.squeeze(x)    #删除一维
    >>>np.broadcast_to(y, (3,1))    #广播为指定格式
    >>>np.expand_dims(y, axis=0)   #插入维度
    
    # 迭代
    # order:'C' — 按行,'F' — 按列,'A' — 原顺序,'k' — 元素在内存中的出现顺序
    >>>a = np.arange(12).reshape(3,4)
    >>>for i in a: print(i, end=' ')
    [0 1 2 3] [4 5 6 7] [ 8  9 10 11]
    >>>for i in np.nditer(a, order='C'): print(i, end=' ')     #多维迭代器,深度迭代 , 不指定时a.T与a迭代序列一致
    0 1 2 3 4 5 6 7 8 9 10 11 
    
    # 广播迭代
    >>>a = np.arange(0,60,5).reshape(3,4)
    >>>b = np.array([1,  2,  3,  4], dtype =  int)
    >>>for x,y in np.nditer([a,b]): print("%d:%d" % (x,y), end=' ')
    0:1 5:2 10:3 15:4 20:1 25:2 30:3 35:4 40:1 45:2 50:3 55:4
    
    # 克隆
    >>>b = a; c=a.copy()      #,order =  'C'|‘F’
    >>>id(b) == id(a); id(c) == id(a)     #True, False
    

      矩阵运算

    >>>A = np.array([[1,2],[3,4]])      
    >>>B = np.array([[11,12],[13,14]])
    >>>A*B    #点积
    array([[11, 24],
           [39, 56]])
    >>>A*2    #点积
    >>>np.multiply(A, B)    #点积,对应元素相乘,同A*B
    >>>np.vdot(A, B)        #点积和,对应相乘相加 = 130
    
    >>>np.mat(A)*np.mat(B)    #矩阵乘法
    matrix([[37, 40],
            [85, 92]])
    >>>np.matmul(A, B) #同np.mat(A)*np.mat(B), 维度不同时,广播
    >>>np.dot(A, B)    #同np.mat(A)*np.mat(B)
    >>>A.dot(B)       #同np.mat(A)*np.mat(B)
    
    >>>np.inner(A, B)  #内积, 最后一维
    array([[35, 41],
           [81, 95]])
    
    >>>A = mat(eye(2,2)*0.5)
    >>>A.I    #逆矩阵
    >>>A.T       #转置
    >>>np.square(A)    #平方
    >>>np.sqrt(A)       #开方
    
    # 线性代数
    >>>np.linalg.det(a)    #行列式
    >>>np.linalg.solve(b, [0,2])   #线性方程组求解
    >>>np.linalg.inv(x)   #逆矩阵
    

      矩阵切片、分割、合并

    >>>A = np.mat(np.random.randint(2,8,size=(3,4)))     #2-8之间的随机整数矩阵
    matrix([[5, 4, 6, 3],
            [7, 3, 4, 2]
            [0, 5, 3, 1]]) 
    >>>A[1:,1:]     #切片
    matrix([[3, 4, 2]
            [5, 3, 1]]) 
    
    >>>A=mat(np.ones((2,2)))
    matrix([[ 1.,  1.],
            [ 1.,  1.]])
    >>>B=np.mat(np.eye(2))
    matrix([[ 1.,  0.],
            [ 0.,  1.]])
    
    # 分割
    >>>a = np.arange(9)
    >>>np.split(a, 3)        #等分
    [array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])]
    >>>np.split(a, [4,7])   #指定位置分割
    [array([0, 1, 2, 3]), array([4, 5, 6]), array([7, 8])]
    >>>a = np.arange(16).reshape(4,4)
    >>>np.hsplit(a, 2)
    >>>np.vsplit(a, 2)
    
    
    # 拼接
    >>>np.concatenate((a,b))        #默认axis=0  纵向拼接
    >>>np.concatenate((a,b), axis=1)   #横向拼接
    >>>np.stack((a,b),0)      #纵向拼接
    >>>np.stack((a,b),1)      #横向拼接
    >>>np.vstack((A, B))      #按列合并
    matrix([[ 1.,  1.],
            [ 1.,  1.],
            [ 1.,  0.],
            [ 0.,  1.]])
    >>>np.hstack((A, B))      #按行合并
    matrix([[ 1.,  1.,  1.,  0.],
            [ 1.,  1.,  0.,  1.]])
    
    # 追加
    >>>a = np.array([[1,2,3],[4,5,6]])
    >>>np.append(a, [7,8,9])   #转为一维数组
    array([1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>>np.append(a, [[7,8,9]], axis=0)    #纵向拼接
    array([[1,2,3],
        [4,5,6],
        [7,8,9])
    >>>np.append(a, [[0,0,0],[7,8,9]], axis=1)    #横向拼接
    array([[1, 2, 3, 0, 0, 0],
           [4, 5, 6, 7, 8, 9]])
    
    # 插入
    >>>np.insert(a,2,[11,12,13])      #序列对应位置插入
    array([ 1,  2, 11, 12, 13,  3,  4,  5,  6])
    >>>np.insert(a,1,[11],axis = 0)    #纵向插入,广播
    array([[ 1,  2,  3],
           [11, 11, 11],
           [ 4,  5,  6]])
    >>>np.insert(a,1,11,axis = 1)      #横向插入,广播
    array([[ 1, 11,  2,  3],
           [ 4, 11,  5,  6]])
    
    # 删除
    >>>np.delete(a, 5)
    >>>np.delete(a, 1, axis=0)
    >>>np.delete(a, 1, axis=1)
    >>>np.delete(a, np.s_[::2])
    
    # 去重
    >>>np.unique(a)
    array([1, 2, 3, 4, 5, 6])
    >>>np.unique(a, return_index = True)    #返回索引
    (array([1, 2, 3, 4, 5, 6]), array([0, 1, 2, 3, 4, 5], dtype=int64))
    >>>np.unique(a,return_inverse = True)  #返回下标
    >>>np.unique(a,return_counts = True)    #返回重复数
    

      矩阵、数组、列表间类型转换

    >>>A = [[1,2],[3,2],[5,2]]  #列表
    [[1, 2], [3, 2], [5, 2]]
    >>>B = np.array(A)       #列表 -> 数组
    >>>B = np.asarray(A)    #列表 -> 数组
    array([[1, 2],
           [3, 2],
           [5, 2]])
    >>>C = np.mat(A)        #列表 -> 矩阵
    matrix([[1, 2],
            [3, 2],
            [5, 2]])
    >>>np.array(C)           #矩阵 -> 数组
    array([[1, 2],
           [3, 2],
           [5, 2]])
    >>>C.getA()           #矩阵 -> 数组
    array([[1,2]
           [3,2]
           [5,2]])
    >>>C.tolist()          #矩阵 -> 列表
    [[1, 2], [3, 2], [5, 2]]
    >>>B.tolist()          #数组 -> 列表
    [[1, 2], [3, 2], [5, 2]]
    
    
    # 注意: 一维矩阵与一维数组转列表结果不一致
    >>>A = np.array([1,2,3])
    array([1, 2, 3])
    >>>B = np.mat([1,2,3])
    matrix([[1, 2, 3]])
    >>>C = A.tolist()   #数组 -> 列表
    [1, 2, 3]
    >>>D = B.tolist()   #矩阵 -> 列表
    [[1, 2, 3]]
    >>> (C==D)
    False
    >>> (C is D[0])    #矩阵表示成了二维形式
    True 
    

      

    2 字符串操作

    >>>np.char.add(['hello', 'hi'],['abc', 'xyz'])      #类似R的paste0
    array(['helloabc'], dtype='<U8')
    >>>np.char.multiply('Hello',3)              #类似R的rep
    array('HelloHelloHello', dtype='<U15')
    # 格式
    >>>np.char.center('hello', 20, fillchar = '*')
    array('*******hello********', dtype='<U20')
    >>>np.char.capitalize('hello world')
    array('Hello world', dtype='<U11')
    >>>np.char.title('hello how are you?')
    array('Hello How Are You?', dtype='<U18')
    >>>np.char.lower(['HELLO','WORLD'])
    array(['hello', 'world'], dtype='<U5')
    >>>np.char.upper(['hello','world'])
    array(['HELLO', 'WORLD'], dtype='<U5')
    # 拆分
    >>>np.char.split ('YiibaiPoint,Hyderabad,Telangana', sep = ',')
    array(list(['YiibaiPoint', 'Hyderabad', 'Telangana']), dtype=object)
    >>>np.char.splitlines('hello\rhow are you?')
    array(list(['hello', 'how are you?']), dtype=object)
    # 压缩
    >>>np.char.strip(['arora','admin','java'],'a')
    array(['ror', 'dmin', 'jav'], dtype='<U5')
    >>>np.char.join([':','-'],['dmy','ymd'])
    array(['d:m:y', 'y-m-d'], dtype='<U5')
    # 替换
    >>>np.char.replace ('He is a good boy', 'is', 'was')
    array('He was a good boy', dtype='<U17')
    # 编码、解码
    >>>np.char.encode('hello', 'cp500') 
    array(b'\x88\x85\x93\x93\x96', dtype='|S5')
    >>>np.char.decode(b'\x88\x85\x93\x93\x96','cp500')
    array('hello', dtype='<U5')
    

      

    3 数学运算

    >>>a = np.array([0,30,45,60,90])
    >>>b = np.sin(a * np.pi/180)
    >>>np.degrees(b)
    
    # 四舍五入
    >>>np.around(a, decimals =  -1)
    >>>np.floor(a)
    >>>np.ceil(a)
    
    # 数组加减乘除
    >>>np.add(a,b)
    >>>np.subtract(a,b)
    >>>np.multiply(a,b)
    >>>np.divide(a,b)
    
    # 其他操作
    >>>np.reciprocal(a)      # 倒数
    >>>np.power(a,b)        # a数组为底,b为幂
    >>>np.mod(a,b)           # 数组a/b余数
    >>>np.remainder(a,b)   # 余数
    
    # 复数操作
    >>>np.real(a)
    >>>np.imag(a)
    >>>np.conj(a)    # 共轭复数
    >>>np.angle(a, deg =  True)
    
    # 统计操作
    >>>np.min(a, 0)    #列最小值
    >>>np.max(a, 1)   #行最大值
    >>>np.amin(a, 0)    #数组纵向最小,但参数表示全局
    >>>np.amax(a, 1)    #数组横向最大
    >>>np.mean(a, axis =  0)     #均值
    >>>np.sum(a, axis=0)      #列和
    >>>np.average([1,2,3,4], weights=[4,3,2,1], returned=True)     #加权均值,返回权值和?
    >>>np.std([1,2,3,4])     #标准差
    >>>np.var([1,2,3,4])     #方差
    >>>std = sqrt(mean((x - x.mean())**2))
    >>>np.ptp(a, axis =  0)      # 极差
    >>>np.percentile(a,50, axis =  1)     # 分位数
    >>>np.median(a, axis =  0)     # 中位数
    
    # 排序、排序索引
    # kind = quicksort(默认), mergesort, heapsort
    >>>a = np.array([[3,7],[9,1]])
    >>>np.sort(a)  # 按行
    >>>np.sort(a, axis=0)   # 按列
    
    >>>a = np.array([3,  1,  2])
    >>>np.argsort(a)   # 按行排序索引
    array([1, 2, 0], dtype=int64)
    >>>a[np.argsort(a)]
    >>>argmin(a, axis=0)   # 列最小值行索引
    >>>argmax(a, axis=1)
    
    >>>dt = np.dtype([('name', 'S10'),('age', int)])
    >>>a = np.array([("raju",21),("anil",25),("ravi",17),("amar",27)], dtype = dt)
    >>>np.sort(a, order = 'name')   # 按name
    array([(b'amar', 27), (b'anil', 25), (b'raju', 21), (b'ravi', 17)], dtype=[('name', 'S10'), ('age', '<i4')])
    
    >>>key = ('b','c','d','a')
    >>>s = ('raju','anil','ravi','amar')
    >>>np.lexsort((s,key))
    array([3, 0, 1, 2], dtype=int64)
    
    >>>np.nonzero(a)   #非零元素索引
    >>>np.where(x > 3)   #满足指定条件的元素位置索引
    >>>x = np.arange(9.).reshape(3, 3)
    >>>condition = np.mod(x,2)==0
    >>>np.extract(condition, x)  #满足条件的元素,条件为逻辑值
    array([0., 2., 4., 6., 8.])
    

      

      

  • 相关阅读:
    Ubuntu18.04配置静态ip遇到的报错
    devilbox(二):连接数据库
    DBeaver
    prometheus-operator 详细总结(helm一键安装)
    如何创建私有 CA 并签发证书
    kong如何记录(nginx代理后)真实ip
    节点亲和性添加
    alertmanager详解
    subprocess.call和subprocess.Popen
    dockerfile-ENTRYPOINT 和CMD配合,以及他们的区别
  • 原文地址:https://www.cnblogs.com/iupoint/p/9635131.html
Copyright © 2011-2022 走看看