美文网首页
NumPy基础之数组的创建

NumPy基础之数组的创建

作者: 5f2a6061653d | 来源:发表于2018-08-15 00:05 被阅读50次

    在数据科学领域有5个最佳的Python库,分别是NumPy、Scipy、Pandas、Matplotlib和Scikit-learn,本篇先讲解NumPy的相关知识。

    NumPy简介

    NumPy(Numerical Python的简称)是Python的开源数值计算扩展库,是高性能科学计算和数据分析的基础包。它可用来存储和处理大型矩阵,比Python自身的嵌套列表nested list structure结构要高效的多(它也可以用来表示矩阵matrix)。

    NumPy之所以可实现科学计算,是因为NumPy包括以下5部分内容:

    • 具有矢量运算和复杂广播快速且节省空间的N维数组对象ndarray

    • 用于读写磁盘数据及操作内存映射文件的工具

    • 较为成熟的标准数据函数库

    • 用于整合C/C++和Fortran代码的工具

    • 实用的线性代数、傅里叶变换和随机数生成函数

    NumPy在数据分析等数据科学领域应用广泛,主要原因如下:

    • 强大的N维数组(矩阵)对象,非常快速高效,可实现矢量数学运算

    • 高效的Index,不需要循环,提高效率,缩短了时间

    • 免费开源并可跨平台使用,其运行效率可与C/Matlab媲美

    数组的创建

    NumPy中最重要、使用频率最高的是N维数组对象,利用此对象可对整块数据执行一些数学运算,本节主要讲解该数组对象的创建及访问。

    NumPy中数组创建方法有多种,具体如下表所示。

    函数名 功能说明
    array 将输入数据(列表、元组、数组或其他序列类型)装换为ndarry,可显示指定dtype,默认直接复制输入数据
    asarray 将输入转换为ndarry,如果输入本身就是一个ndarry则不进行复制
    arange 类似于内置的range函数,但返回的是一个ndarry而不是列表
    ones、ones_like 根据指定的形状和dtype创建一个全1数组,ones_like以另一个数组为参数,并根据其形状和dtype创建一个全1数组
    zeros、zeros_like 类似于ones和ones_like,只不过创建的是一个全0数组
    empty、empty_like 创建新数组,只分配内存空间但不填充任何值
    eye、identity 创建一个N×N并且对角线全为1,其余为0的数组

    上表是NumPy中创建数组的函数说明,接下来将展示部分函数的使用及效果,具体如下所示:

    1. 使用array()函数直接创建,具体示例如下所示:
    In [1]: import numpy as np
    In [2]: array1 = np.array([1,2,3,4,5])
    In [3]: lst = [1,2,3,4,5]
    In [4]: array2 = np.array(lst)
    In [5]: lst1 = [6,7,8,9,10]
    In [6]: array3 = np.array([lst,lst1])
    

    上述代码创建了3个数组array1、array2和array3,其中array1和array2是一维数组,运行结果如下所示:

    In [7]: array1
    Out[7]: array([1, 2, 3, 4, 5])
    In [8]: array2
    Out[8]: array([1, 2, 3, 4, 5])
    

    数组array3是二维数组,运行结果如下所示:

    In [9]: array3
    Out[9]:
    array([[ 1, 2, 3, 4, 5],
     [ 6, 7, 8, 9, 10]])
    
    1. 使用arange(start,end,step)函数创建,其中参数start是起始值,end是终止值,step是步长,最终返回一个array对象,具体示例如下所示:
    In [10]: import numpy as np
    In [11]: array4 = np.arange(1,10)
    In [12]: array5 = np.arange(1,10,2)
    In [13]: array6 = np.arange(1,10).reshape(3,3)
    

    上述代码创建了3个数组array4、array5和array6,其中In [13]的reshape(3,3)函数是将生成的一维数组转换为拥有3行3列的二维数组,上述示例中各数组的运行结果如下所示:

    In [14]: array4
    Out[14]: array([1, 2, 3, 4, 5, 6, 7, 8, 9])
    In [15]: array5
    Out[15]: array([1, 3, 5, 7, 9])
    In [16]: array6
    Out[16]:
    array([[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]])
    
    1. ones()和zeros()函数,二者是返回全1或全0数组,具体示例如下所示:
    In [20]: import numpy as np
    In [21]: array10 = np.ones([2,4])
    In [22]: array11 = np.zeros([2,4])
    

    上述代码创建了2个数组array10和array11,其中In [21]是生成一个2行4列的全1数组并赋值给array10;In [22]是生成一个2行4列的全0数组并赋值给array11;上述示例中各数组运行结果如下所示:

    In [23]: array10
    Out[23]:
    array([[1., 1., 1., 1.],
     [1., 1., 1., 1.]])
    In [24]: array11
    Out[24]:
    array([[0., 0., 0., 0.],
     [0., 0., 0., 0.]])
    
    1. eye()函数,创建并返回一个对角线为1,其余为0的数组,具体示例如下所示:
    In [17]: import numpy as np
    In [18]: array12 = np.eye(4)
    In [19]: array13 = np.eye(3)
    

    上述代码创建了两个数组array12和array13,其中In [18]是创建了一个4×4的对角线为1,其余为0的数组并赋值给array12;In [19]是创建了一个3×3的对角线为1,其余为0的数组并赋值给array13;上述示例中各数组运行结果如下所示:

    In [25]: array12
    Out[25]:
    array([[1., 0., 0., 0.],
     [0., 1., 0., 0.],
     [0., 0., 1., 0.],
     [0., 0., 0., 1.]])
    In [26]: array13
    Out[26]:
    array([[1., 0., 0.],
     [0., 1., 0.],
     [0., 0., 1.]])
    

    上述4种是较为基础并常见的创建数组的方式,但是除了上述4种还可以通过随机数来快速创建符合某些特质的数组,具体示例如下所示:

    In [27]: import numpy as np
    In [28]: array7 = np.random.randn(5)
    In [29]: array8 = np.random.randint(10,size=(3,3))
    In [30]: array9 = np.random.randint(10,size=9).reshape(3,3)
    

    上述代码创建了3个数组array7、array8和array9,其中In [28]是随机生成含有5个符合正态分布值的数组并赋值给array7;In [29]是随机生成一个3行3列并且所有元素均为10以内整数的数组并赋值给array8;In [30]中reshape(3,3)是将生成的由9个10以内的整数组成数组转换为3行3列的数组,并赋值给array9;上述示例中各数组的运行结果如下所示:

    In [32]: array7
    Out[32]: array([-0.66070016,0.74529797,1.81593755,0.25059274, -0.27814649])
    In [33]: array8
    Out[33]:
    array([[5, 3, 1],
     [6, 7, 7],
     [4, 9, 2]])
    In [34]: array9
    Out[34]:
    array([[4, 0, 0],
     [1, 4, 3],
     [4, 6, 4]])
    
    

    相关文章

      网友评论

          本文标题:NumPy基础之数组的创建

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