• 科学技术库Numpy


    一、生成矩形操作

    1)numpy获取的数据是以  “,”  为分割的数据结构,来生成矩阵

    注意:skip_header=1 去掉行首,即说明行
    1,Cao jin,28,78978978978,python,2015-11-01
    2,张二毛,20,12312312312,IT,2013-11-01
    3,三,28,78978978978,python,2015-11-01
    4,张大三,28,78978978978,python,2015-11-01
    5,二毛,20,12312312312,运维,2013-11-01
    1.txt
    import numpy
    a = numpy.genfromtxt("1.txt",encoding='utf-8',delimiter=",",dtype=str)
    print(type(a))      # 查看类型
    print(a)                # 查看获取到的文档
    print(help(numpy.genfromtxt))   # 查看该函数的帮助
    获取数据.py

    获得的结果

    <class 'numpy.ndarray'>
    [['1' 'Cao jin' '28' '78978978978' 'python' '2015-11-01']
     ['2' '张二毛' '20' '12312312312' 'IT' '2013-11-01']
     ['3' '' '28' '78978978978' 'python' '2015-11-01']
     ['4' '张大三' '28' '78978978978' 'python' '2015-11-01']
     ['5' '二毛' '20' '12312312312' '运维' '2013-11-01']]

    2)单独取值的操作

    import numpy
    a = numpy.genfromtxt("1.txt",encoding='utf-8',delimiter=",",dtype=str,skip_header=1)  # skip_header=1 去掉说明行
    print(a)
    print(a[1,5])   # 获取到第二行的,第6个值
    View Code

     2)列表生成矩阵

    import numpy
    verctor = numpy.array([5,10,15,20])     # 矩阵操作
    print("==>verctor",verctor)
    matrix = numpy.array([[5,10,15],[20,25,30],[35,40,45]])     # 矩阵操作
    print("==>matrix",matrix)
    View Code
    ==>verctor [ 5 10 15 20]
    ==>matrix [[ 5 10 15]
     [20 25 30]
     [35 40 45]]

     3)获取到行列数

    import numpy
    verctor = numpy.array([1,2,3,4])    # 特殊的行
    print(verctor.shape)  #   (4,)
    matrix = numpy.array([[5,10,15],[20,25,30]])
    print(matrix.shape)   #  (2, 3)  意思是2行,每行3个元素,即2行3列
    print(matrix.ndim)          # 2行3列,所以2个维度
    print(matrix.size)          # 6 个元素
    print(matrix.dtype.name)   #  int32 类型
    View Code

     4)对生成的矩阵数必须统一,如果有一个不是相应的类型,都将发生改变

    import numpy
    verctor = numpy.array([1,2,3,4.0])
    print(verctor)
    print(verctor.dtype)
    View Code

    本来大都是int型,只因为传入了一个float行,都变成了float行

    [1. 2. 3. 4.]
    float64

     5)矩阵灵活的切片操作

    import numpy
    vector = numpy.array([5,10,15,20])
    print(vector[0:2])  # [ 5 10]   # 顾头不顾尾
    matrix = numpy.array([[5,10,15],[20,25,30],[35,40,45]])
    print(matrix)
    print(matrix[:,2])   # [15 30 45] 获取到每行的第3个元素,相当与获取到第三列
    print(matrix[1:,2])  #[15 30 45]  # 获取到的是这个列表的第1到最后的元素
    print(matrix[:2,2])  #[15 30 45]  # 获取到的是这个列表的第0到第1个元素
    print(matrix[:,0:2])    # 获取到每行的前2列元素
    View Code

     二、矩阵的基本操作

    1)判断矩阵里面的每一个值

    import numpy
    vector = numpy.array([5,10,15,20])
    print(vector == 10)    # 判断里面的每一个值是否等于10
    matrix = numpy.array([[5,10,15],[20,25,30],[35,40,45]])
    a = matrix == 10       # 判断里面的每一个值是否等于10
    print(a,type(a))
    View Code

    2)根据判断值,来进行获取值的操作

    import numpy
    vector = numpy.array([5,10,15,20])
    equal_to_ten = (vector == 10)
    print(equal_to_ten)
    print(vector[equal_to_ten])     # 取出值为10的
    
    matrix = numpy.array([[5,10,15],[20,25,30],[35,40,45]])
    second_column_25 = (matrix[:,2] == 15)      # 先找到有15的那一行
    print(second_column_25)
    print(matrix[second_column_25])
    a = matrix[second_column_25]
    b = (a == 15)   # 获取到15的值
    print(a[b])
    View Code

    3)&符号和 | 

    import numpy
    vector = numpy.array([5,10,15,20])
    equal_five_and_ten = (vector == 10) & (vector == 5)     # 不可能存在
    print(equal_five_and_ten)
    
    vector2 = numpy.array([5,10,15,20])
    equal_five_or_ten = (vector2 == 10) | (vector2 == 5)
    print(equal_five_or_ten)
    View Code

    4)更改矩阵的值

    import numpy
    vector = numpy.array([5,10,15,20])
    equal_five_or_ten = (vector == 10) | (vector == 5)
    vector[equal_five_or_ten] = 50
    print(vector)
    View Code

     5)类型的转换

    import numpy
    vector = numpy.array(["1","2","3"])
    print(vector.dtype)
    print(vector)
    vector = vector.astype(float)
    print(vector.dtype)
    print(vector)
    vector = vector.astype(int)
    print(vector)
    print(vector.dtype)
    View Code

    6)取最小值,最大值,每行的和,及每列的和

    import numpy
    matrix = numpy.array([[5,10,15],[20,25,30],[35,40,45]])
    print(matrix)
    print(matrix.min())
    print(matrix.max())
    # 按照行操作axis=1 ,按照列操作axis=0
    print(matrix.min(axis=1))   # 计算每一行的最小值
    print(matrix.sum(axis=1))   # 计算每一行的和
    print(matrix.sum(axis=0))   # 计算每一列的和
    View Code

     7)平分数列

    import numpy as np
    print(np.arange(15))
    a = np.arange(15).reshape(3,5)  # 等分成3行5列
    print(a)
    print(a.shape)
    print(a.ndim)   # 因为是3行5列,所以维度为2。。
    print(a.size)   # 计算有多少元素
    print(a.dtype.name)     # int32   类型
    View Code

     8)初始化数据操作

    import numpy  as np
    a = np.zeros((3,4))     # 初始化操作,默认元素为0,且为float
    print(a)
    
    b = np.ones((2,3,4),dtype=np.int32)
    print(b)
    
    c = np.arange(10,30,5)
    print(c)    # [10 15 20 25]
    View Code

    9).random随机数

    import numpy  as np
    a = np.random.random((2,3))
    print(a)
    # [[0.27278308 0.53345672 0.83729457]
    #  [0.4760841  0.18489101 0.16778119]]
    View Code

     10)在起始值随机取数

    import numpy  as np
    from numpy import pi
    a = np.linspace(0,2*pi,100)     # 在起始值之间平均的找到这些数
    print(a)
    
    b = np.sin(np.linspace(0,10,5))
    print(b)
    View Code

    11)矩阵之间的加减乘除

    import numpy  as np
    a = np.array([20,30,40,50])
    b = np.arange(4)
    print(a)
    print(b)
    c = a - b
    print(c)
    print(a*b)
    c = c - 1
    print(c)
    print(b**2)
    print(a<35)
    View Code

    12)矩阵的混合运算

    import numpy  as np
    A = np.array([[1,1],[0,1]])
    B = np.array([[2,0],[3,4]])
    print(A)
    print(B)
    print("****************")
    print(A*B)
    print("dot dot dot dot")
    print(A.dot(B))     # 或 print(np.dot(A,B))
    # 5 ==>1*2+3  4 ==> 1*0+4   3 ===> 0*2+3  4 ===> 1*0+4
    # [[5 4]
    #  [3 4]]
    View Code

     三、矩阵的基本函数

    1)e次方计算,根号计算

    import numpy  as np
    B = np.arange(3)
    print(B)
    print(np.exp(B))    # 返回的是e的多少次方,e = 2.71828
    print(np.sqrt(B))   # 开根号
    View Code

    2)矩阵的复制操作

    使用 “=” 复制,完全一样。id也一样。深复制

    import numpy  as np
    
    a = np.arange(12)
    b = a   # 在矩阵中,b和a 指向同一个内存地址,犹如创建了一个快捷方式
    print(b is a)
    print(b)
    b.shape = 3,4
    print(a.shape)
    print(id(a))
    print(id(b))
    View Code

     使用“a.view()” 复制,浅复制,共用数据。在修改数据的时候,相应的都会发生变化

    import numpy  as np
    
    a = np.arange(12)
    c = a.view()    # 浅复制。公用数据
    print(a)
    print(c)
    print(c is a)
    c.shape = 2,6
    print(a)
    print('#######')
    c[0,4] = 1234   # 对某一个元素的修改,会影响到原来的元素
    print(c)
    print('#######')
    print(a)
    View Code

     使用“a.copy()” 复制,完全将数据复制了一份。复制的数据和之前的数据已经脱离了关系。推荐使用

    import numpy  as np
    
    a = np.arange(12)
    d = a.copy()
    print(d is a)
    d[4] = 999
    print(d)
    print(a)
    View Code

    3)矩阵的常用方法

    import numpy  as np
    
    b = np.random.random((3,4))
    print(b)
    print('********')
    a = np.floor(b*10)  # floor 向下的取整
    print(a)
    print('-----------')
    print(a.ravel())    # ravel 把一个矩阵撑长
    print('============')
    a.shape = (6,2)     # 变成了6行2列的矩阵
    print(a)
    print('$$$$$$$')
    print(a.T)          # 行列对换,变成了2行6列
    View Code

     矩阵之间的合并操作

    import numpy  as np
    
    a = np.floor(10*np.random.random((2,2)))
    b = np.floor(10*np.random.random((2,2)))
    print(a)
    print('-----------')
    print(b)
    print('===========')
    print(np.vstack((a,b)))     # 同样的特征合并操作
    print('***********')
    print(np.hstack((a,b)))     # 不同的特殊合并操作
    View Code

     切割矩阵,按行切,按列切

    import numpy  as np
    
    a = np.floor(10*np.random.random((2,12)))
    print(a)
    print('-----------')
    print(np.hsplit(a,3))   # 平均按列切3刀,分成3份array
    print(np.hsplit(a,(3,4)))   # 在3和4 这个位置按列分别切一刀
    b = np.floor(10*np.random.random((12,2)))
    print(b)
    print(np.vsplit(b,3))       # 平均按行切3刀,分成3份array
    View Code

     寻找最大值

    import numpy  as np
    date = np.sin(np.arange(20)).reshape(5,4)
    print(date)
    print("==============")
    ind = date.argmax(axis = 0) # 按列寻找,寻找到最大数的 id 号
    print(ind)
    print("==============")
    date_max = date[ind,range(date.shape[1])]   # 根据列,找到id号对应的最大值
    print(date_max)
    View Code

     把一维矩阵复制成多份

    import numpy  as np
    a = np.arange(0,40,10)
    print(a)
    b = np.tile(a,(2,2))    # 把a 元素复制成2行2列
    print(b)
    View Code

     排序,值的大小排序,值的索引值进行排序

    import numpy  as np
    a = np.array([[4,3,5],[1,2,1]])
    print(a)
    b = np.sort(a,axis=1)   # 排序
    print(b)
    print("=========")
    a = np.array([4,3,1,2])
    j = np.argsort(a)   # 根据索引值的大小进行排序
    print(j)
    View Code

    四、总结

    a = numpy.genfromtxt("1.txt",encoding='utf-8',delimiter=",",dtype=str)  # 从文件解析陈矩阵
    a = numpy.genfromtxt("1.txt",encoding='utf-8',delimiter=",",dtype=str,skip_header=1)    # skip_header=1 去掉第一行,说明行
    matrix = numpy.array([[5,10,15],[20,25,30],[35,40,45]])     # 列表矩阵操作
    matrix.shape   #  获取到矩阵的行列数
    print(matrix[:,2])  # 切片操作
    ===============================
    vector = numpy.array([5,10,15,20])
    equal_to_ten = (vector == 10)
    print(vector[equal_to_ten])     # 取值操作
    vector.min()    # 取最小值
    vector = numpy.array(["1","2","3"])
    vector = vector.astype(float)  # 类型转换
    np.arange(15).reshape(3,5)     # 等分成3行5列
    print(a.shape)
    np.arange(10,30,5)      # 初始化数据
    floor 向下的取整
    ravel 把一个矩阵撑长
    a.shape = (6,2)     # 变成了6行2列的矩阵
    a.T             # 行列对换,变成了2行6列
    np.vstack((a,b))     # 同样的特征合并操作
    np.hstack((a,b))     # 不同的特殊合并操作
    np.hsplit(a,3)       # 平均按列切3刀,分成3份array
    np.hsplit(a,(3,4))   # 在3和4 这个位置按列分别切一刀
    np.vsplit(b,3))       # 平均按行切3刀,分成3份array
    b = a               # 矩阵中,a 和 b 完全一样,共用内存地址
    c = a.view()        # 不推荐使用,浅复制。共用数据。只在修改数据的时候发生了变化
    d = a.copy()        # 推荐使用,复制了,原来的数据和现在的数据已经没有关系了
    date.argmax(axis = 0) # 按列寻找,寻找到最大数的 id 号
    date[ind,range(date.shape[1])]   # 根据列,找到id号对应的最大值
    np.tile(a,(2,2))    # 把a 元素复制成2行2列
    np.sort(a,axis=1)   # 按行排序
    np.sort(a,axis=1)   # 值的大小排序
    np.argsort(a)   # 根据索引值的大小进行排序
  • 相关阅读:
    PHP培训教程 PHP里10个鲜为人知但却非常有用的函数
    跟我学Spring Boot(一)创建Spring Boot 项目
    android 4.0 webview 无法播放视频
    vs2008 安装部署 启动项
    android 使用webview 加载网页
    hbase 无法打开60010网页
    oracle 提示没有监听
    hbase 基本命令
    hbase 单机版安装
    win7 64位远程连接oracle11g64位
  • 原文地址:https://www.cnblogs.com/linu/p/9189856.html
Copyright © 2020-2023  润新知