美文网首页
2019-01-16 Numpy基础

2019-01-16 Numpy基础

作者: MMatx | 来源:发表于2019-01-19 18:46 被阅读0次

    为什么使用numpy

    numpy是Python的一种开源的科学计算库
    NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。
    NumPy提供了一个N维数组类型ndarray,它描述了相同类型的“items”的集合。

    ndarray到底跟原生python列表的区别:

    ndarray在存储数据的时候,数据与数据的地址都是连续的,这样就给使得批量操作数组元素时速度更快。

    这是因为ndarray中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,所以ndarray在存储元素时内存可以连续,而python原生list就只能通过寻址方式找到下一个元素,这虽然也导致了在通用性能方面Numpy的ndarray不及Python原生list,但在科学计算中,Numpy的ndarray就可以省掉很多循环语句,代码使用方面比Python原生list简单的多。

    numpy内置了并行运算功能,当系统有多个核心时,做某种计算时,numpy会自动做并行计算

    Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,效率远高于纯Python代码。

    几种数组类型的比较

    一.python中的List
    (1)数组生成方法

    L= [i for i in range(5)]
    L=[1,2,3,4,5]
    

    (2) 数组元素修改方法

    L[5] = 'welcome to dataAnalysis'
    
    

    (3)添加元素

    1. append() 追加单个元素到List的尾部,只接受一个参数,参数可以是任何数据类型,被追加的元素在List中保持着原结构类型。此元素如果是一个list,那么这个list将作为一个整体进行追加,注意append()和extend()的区别。
    2. extend() 将一个列表中每个元素分别添加到另一个列表中,只接受一个参数;extend()相当于是将list B 连接到list A上。
    3. insert() 将一个元素插入到列表中,但其参数有两个(如insert(1,”g”)),第一个参数是索引点,即插入的位置,第二个参数是插入的元素。
      • 加号,将两个list相加,会返回到一个新的list对象,注意与前三种的区别。前面三种方法(append, extend, insert)可对列表增加元素的操作,他们没有返回值,是直接修改了原数据对象。 注意:将两个list相加,需要创建新的list对象,从而需要消耗额外的内存,特别是当list较大时,尽量不要使用“+”来添加list,而应该尽可能使用List的append()方法。
    L.append('jdc')
    
    

    (4) 删除元素
    1.使用del删除对应下标的元素
    2.使用.pop()删除最后一个元素
    3.删除指定值的元素 remove
    4.使用切片来删除

    del L[0] #对应下标的元素
    L.pop()
    L.remove(1) #对应元素
    

    (4)List中可以存储不同类型的数据,不对存储类型进行检查,缺点,性能低要检查每个元素的类型
    2.array模块
    (1)使用之前要引入模块

    import array
    

    (2)Python虽然也提供了array模块,但其只支持一维数组,不支持多维数组,也没有各种运算函数。因而不适合数值运算
    (3)具体使用见下链接
    https://www.cnblogs.com/dengyg200891/p/4946399.html
    三、Numpy模块
    1.创建数组/矩阵的方法
    (1)指定元素直接创建
    (2)使用循环指定元素
    (3)使用函数生成
    zeros
    eye
    ones
    arange
    linspace
    full

    ****************
    numpy.array([1,2,3,4])  #生成一维数组
    numpy.array([[1,2,3],[4,5,6]]) #生成二维矩阵
    ***************
    numpy.array([i for i in range(10)]) #生成一维数组
    numpy.array([i for i in range(15)]).reshape(3,5)#使用reshape变成二维矩阵
    ***************
    #生成全零数组/矩阵
    numpy.zeros(10)
    numpy.zeros(10).reshape(2,5)
    numpy.zeros((2,2)) #可指定元组,直接生成矩阵,代表行列数量
    np.zeros(shape=(3,5),dtype=int)
    #生成对角矩阵
    numpy.eye(10)
    #生成全1数组/矩阵,可指定元素的数据类型
    numpy.ones(10,dtype=int)
    numpy.ones(10,dtype=int).reshape(2,5)
    #生成数组/矩阵里面元素的所有值都一样
    numpy.full(10,10)
    np.full((3, 5), 666) #后面指定元素的值
    np.full((3, 5), fill_value=666.6)
    #直接生成
    numpy.arange(10)
    out:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    np.arange(0, 20 , 2) #指定起始和结束位置以及步长
    np.arange(0, 10)  #默认步长为1
    np.linspace(0, 20 , 10) #生成等间距的数组,起始位置结束位置+元素的个数
    
    
    

    2.numpy随机数
    (1)生成随机整数

    numpy.random.randint(1,10) #生成[1,10) 之间的整数
    numpy.random.randint(1,10,size=20) #生成随机数组
    numpy.random.randint(1,10,size=(2,3)) #生成随机矩阵
    

    (2)生成随机浮点数

    numpy.random.random(10)
    np.random.random() #生成[0, 1) 随机浮点数
    np.random.random(10) #生成[0, 1) 随机浮点数
    np.random.random((3, 5)) #生成[0, 1) 随机浮点数
    

    (3)生成指定均值和方差的浮点数

    np.random.normal() #均值为0 方差为1 随机浮点数
    np.random.normal(10, 100) #均值为10方差为100 随机浮点数
    np.random.normal(0, 1, (3, 5)) #
    

    3.修改元素值
    可直接修改

    nparr[5] = 100
    

    4.numpy其他
    (1)查看元素的数据类型

    nparr.dtype  #numpy对象名.dtype
    

    (2)numpy数据类型如果数据类型不匹配要进行数据类型转换,则进行截位操作,不进位
    (3)数据类型转换
    直接调用函数

    npz.astype(float)
    

    相关文章

      网友评论

          本文标题:2019-01-16 Numpy基础

          本文链接:https://www.haomeiwen.com/subject/jxwadqtx.html