zoukankan      html  css  js  c++  java
  • 机器学习——Numpy库

    机器学习——Numpy库

    安装

    pip install numpy
    conda install numpy
    

    使用

    定义一个矩阵

    通过列表生成

    import numpy as np
    
    # 定义一个数组,格式一样
    vector = [
        [1,2,3],
        [1,2,5],
        [3,5,6]
    ]
    #转换成矩阵
    matrix = np.array(vector)
    print(matrix)
    
    #通过range生成,参数和range一样
    matrix = np.arange(15).reshape(3,5)
    print(matrix)
    
    #通过linspace,按照间隔生成更方便一点
    array = np.linspace(0,2*pi,100)
    matrix = np.array(array)
    print(matrix)
    
    

    初始化生成

    ## 初始化一个全为0的矩阵
    matrix = np.zeros((3,4), dtype=np.int32)
    print(matrix)
    ## 初始化一个全为1的矩阵
    matrix = np.ones((2,3), dtype=np.int32)
    print(matrix)
    
    ## 随机生成一个矩阵
    matrix = np.random.random((3,4))
    print(matrix)
    

    通过文件生成

    ## genfromtxt可以直接读取文件内容,存储成文件列表
    temp = np.genfromtxt("temp.txt",delimiter=",",dtype=str)
    print(type(temp))
    print(temp)
    

    矩阵的属性和方法

    # 矩阵维度
    print(matrix.ndim)
    # 获取矩阵的长宽
    print(matrix.shape)
    # 获取矩阵行数
    print(matrix.shape[0])
    # 获取矩阵的列数
    print(matrix.shape[1])
    # 获取矩阵的数据类型,矩阵中数据类型是相同的
    print(matrix.dtype)
    
    #矩阵比较会返回一个列表,对矩阵中每一个元素进行比较
    print(matrix == 3)
    print(matrix[matrix == 3][0])
    
    # 判断第0行,第1列的元素是否等于3
    print(matrix[:,0][1] == 3)
    
    # 转换类型
    matrix = matrix.astype(float)
    print(matrix.dtype)
    
    ## 极值
    print(matrix.min())
    print(matrix.max())
    
    # 求和
    ## 对列求和
    print(matrix.sum(axis=0))
    ##对行求和
    print(matrix.sum(axis=1))
    
    
    a = np.floor(10*np.random.random((5,2)))
    print(a)
    #按照列计算,取出最大值的索引,axis是按列计算
    ind = a.argmax(axis=0)
    print(ind)
    
    #按照索引,取出值,a[行,列],
    data = a[ind,range(a.shape[1])]
    print(data)
    
    

    计算

    加减运算

    a = np.array([10,20,30,40])
    b = np.arange(4)
    print(a)
    print(b)
    c = a - b
    print(c)
    c = c - 1
    print(c)
    
    # [10 20 30 40]
    # [0 1 2 3]
    # [10 19 28 37]
    # [ 9 18 27 36]
    
    

    乘法运算

    a = np.array([[1,1], 
                  [0,1]])
    b = np.array([[2,0], 
                  [3,4]])
    print(a*2)
    # [[2 2]
    #  [0 2]]
    print(a*b)
    # [[2 0]
    #  [0 4]]
    print(a.dot(b))
    # [[5 4]
    #  [3 4]]
    print(np.dot(a,b))
    # [[5 4]
    #  [3 4]]
    

    矩阵变换

    矩阵和列表的转换

    # floor进行一个向下取整
    a = np.floor(10*np.random.random((3,4)))
    print(a)
    # [[8. 4. 3. 2.]
    #  [9. 8. 5. 3.]
    #  [7. 7. 1. 2.]]
    
    #矩阵转变为列表
    print(a.ravel())
    # [8. 4. 3. 2. 9. 8. 5. 3. 7. 7. 1. 2.]
    
    #列表变为矩阵,写为-1表示默认为12/3,不需要自己计算
    print(a.ravel().reshape(3,-1))
    # [[8. 4. 3. 2.]
    #  [9. 8. 5. 3.]
    #  [7. 7. 1. 2.]]
    
    ## 矩阵的变换
    a.shape = (6,2)
    print(a)
    # [[8. 4.]
    #  [3. 2.]
    #  [9. 8.]
    #  [5. 3.]
    #  [7. 7.]
    #  [1. 2.]]
    
    # 矩阵的转置
    print(a.T)
    # [[8. 3. 9. 5. 7. 1.]
    #  [4. 2. 8. 3. 7. 2.]]
    

    矩阵的拼接

    #矩阵拼接
    a = np.floor(10*np.random.random((2,2)))
    b = np.floor(10*np.random.random((2,2)))
    
    print(a)
    print(b)
    
    #水平拼接
    print(np.hstack((a,b)))
    #竖直拼接
    print(np.vstack((a,b)))
    
    # [[5. 0.]
    #  [8. 5.]]
    # [[4. 6.]
    #  [0. 5.]]
    # [[5. 0. 4. 6.]
    #  [8. 5. 0. 5.]]
    # [[5. 0.]
    #  [8. 5.]
    #  [4. 6.]
    #  [0. 5.]]
    

    矩阵的切分

    a = np.floor(10*np.random.random((2,12)))
    print(a)
    print(np.hsplit(a,3))
    
    # [[7. 1. 0. 9. 9. 9. 6. 8. 0. 4. 7. 8.] 
    #  [2. 2. 1. 3. 4. 2. 6. 9. 1. 9. 3. 5.]]
    # [array([[7., 1., 0., 9.],
    #        [2., 2., 1., 3.]]), array([[9., 9., 6., 8.],    
    #        [4., 2., 6., 9.]]), array([[0., 4., 7., 8.],    
    #        [1., 9., 3., 5.]])]
    
    print(np.hsplit(a,(3,4)))
    
    # [array([[7., 1., 0.],
    #        [2., 2., 1.]]), array([[9.],
    #        [3.]]), array([[9., 9., 6., 8., 0., 4., 7., 8.],
    #        [4., 2., 6., 9., 1., 9., 3., 5.]])]
    
    a = np.floor(10*np.random.random((12,2)))
    print(a)
    print(np.vsplit(a,3))
    
    # [[3. 1.]
    #  [5. 1.]
    #  [7. 6.]
    #  [9. 6.]
    #  [8. 6.]
    #  [7. 1.]
    #  [5. 0.]
    #  [2. 2.]
    #  [5. 9.]
    #  [3. 3.]
    #  [2. 3.]
    #  [8. 0.]]
    # [array([[3., 1.],
    #        [5., 1.],
    #        [7., 6.],
    #        [9., 6.]]), array([[8., 6.],
    #        [7., 1.],
    #        [5., 0.],
    #        [2., 2.]]), array([[5., 9.],
    #        [3., 3.],
    #        [2., 3.],
    #        [8., 0.]])]
    

    矩阵的复制

    a = np.floor(10*np.random.random((12,2)))
    
    #直接复制,指针指向同一块地址,id一样
    b = a
    #浅复制,共用一堆值,修改b,c会改变
    c = a.view()
    #深复制,空间和值都和a无关
    d = a.copy()
    

    排序

    a = np.array([[4,3,4],[1,2,1]])
    print(a)
    # [[4 3 4]
    #  [1 2 1]]
    print(np.sort(a,axis=1))
    # [[3 4 4]
    #  [1 1 2]]
    print(np.argsort(a,axis=1))
    # [[1 0 2]
    #  [0 2 1]]
    a.sort(axis=1)
    print(a)
    
    # [[3 4 4]
    #  [1 1 2]]
    
  • 相关阅读:
    hdu 1074
    hdu 4091
    hdu 4422
    hdu 3940
    hdu 2831
    hdu 1172
    hdu 3732
    hdu 1250
    hud 2073
    IOS socket基于tcp/udp的通信
  • 原文地址:https://www.cnblogs.com/tomyyyyy/p/12734868.html
Copyright © 2011-2022 走看看