美文网首页Numpy
NumPy基础之数组常用函数(二)

NumPy基础之数组常用函数(二)

作者: 5f2a6061653d | 来源:发表于2018-09-18 21:47 被阅读14次

    集合函数

    NumPy提供了一些针对一维数组的基本集合运算方法,具体如下表所示。

    方法名 说明
    unique(a) 计算a中的唯一元素,并返回有序结果
    intersect1d(a,b) 计算a和b中的公共元素,并返回有序结果
    union1d(a,b) 计算a和b的并集,并返回有序结果
    in1d(a,b) 得到一个表示“a的元素是否包含于b”的布尔型数组
    setdiff1d(a,b) 集合的差,即元素在a中且不在b中
    setxor1d(a,b) 集合的对称差,即存在于一个数组中但不同时存在于两个数组中的元素

    上表是数组的集合运算方法,其中以unique()函数运用比较频繁。接下来以unique()函数为例讲解数组的集合运算方法的用法,具体示例如下所示:

    In [1]: import numpy as np
    In [2]: arr = np.random.randint(10,size = 20)
    In [3]: ua = np.unique(arr)
    

    上述代码是unique()函数的使用,其中In [2]是创建了一个4行5列的随机数组,并将其赋值给变量arr;In [3]是使用unique()函数,并将unique()函数的返回结果赋值给变量ua。各变量的运行结果如下所示:

    In [5]: arr
    Out[5]: array([7, 0, 4, 1, 0, 0, 0, 2, 7, 1, 6, 5, 7, 0, 9, 0, 2, 4, 6, 7])
    In [6]: ua
    Out[6]: array([0, 1, 2, 4, 5, 6, 7, 9])
    

    线性代数函数

    线性代数运算包括矩阵乘法、矩阵分解、行列式以及其他方阵数学等,是任何数组库的重要组成部分,函数一般包含在numpy.linalg中,常见的numpy.linalg函数如下表所示。

    函数名 说明
    diag 以一维数组的形式返回方阵的对角线(或非主对角线)元素,或将一维数组转换为方阵(非对角线元素为0)
    dot 矩阵乘法(矩阵相乘)
    trace 计算对角线元素的和
    det 计算矩阵行列式
    eig 计算方阵的本征值和本征向量
    inv 计算方阵的逆
    pinv 计算矩阵的Moore-Penrose伪逆
    qr 计算QR分解
    svd 计算奇异值分解
    solve 解线性方程组Ax=b,其中A为一个方阵
    lstsq 计算Ax=b的最小二乘解

    上表是常见的numpy.linalg函数,接下来以dot()函数为例讲解numpy.linalg函数的用法,具体示例如下所示:

    In [1]: import numpy as np
    In [2]: arr1 = np.random.randint(10,size = 20).reshape(4,5)
    In [3]: arr2 = np.random.randint(10,size = 20).reshape(5,4)
    In [4]: marr = arr1.dot(arr2)
    In [5]: marray = np.dot(arr1,arr2)
    

    上述代码是dot()函数的使用,其中In [2]是创建一个4行5列的随机数组,并将其赋值给变量arr1;In [3] 是创建一个5行4列的随机数组,并将其赋值给变量arr2;In [4]是使用dot()函数,并将dot()函数的返回结果赋值给变量marr;In [5]是dot()函数的另一种使用方式,与In [4]效果相同,并将返回结果赋值给变量marray。各变量的运行结果如下所示:

    In [6]: arr1
    Out[6]:
    array([[6, 4, 6, 7, 2],
     [0, 4, 5, 6, 7],
     [3, 4, 4, 7, 0],
     [2, 2, 2, 6, 3]])
    In [7]: arr2
    Out[7]:
    array([[9, 8, 1, 8],
     [0, 7, 7, 7],
     [4, 4, 1, 5],
     [2, 7, 0, 1],
     [5, 2, 8, 5]])
    In [8]: marr
    Out[8]:
    array([[102, 153, 56, 123],
     [ 67, 104, 89, 94],
     [ 57, 117, 35, 79],
     [ 53, 86, 42, 61]])
    In [9]: marray
    Out[9]:
    array([[102, 153, 56, 123],
     [ 67, 104, 89, 94],
     [ 57, 117, 35, 79],
     [ 53, 86, 42, 61]])
    

    从上述运行结果可以看出,dot()函数的两种使用方式所得的结果相同,dot()函数实现两可相乘矩阵的相乘运算。

    随机数函数

    在numpy.random模块中,含有很多随机数函数,并对Python内置的random模块作了进一步的补充,其中部分函数如下表所示。

    函数名 说明
    seed 确定随机数生成器的种子
    permutation 返回一个序列的随机排列或返回一个随机排列的范围
    shuffle 对一个序列就地随机排列
    rand 产生均匀分布的样本值
    randint 从给定的上下限范围内随机选取整数
    randn 产生正态分布(平均值为0,标准差为1)的样本值,类似与MATLAB接口
    binomial 产生二项分布的样本值
    normal 产生正态(高斯)分布的样本值
    beta 产生Beta分布的样本值
    chisquare 产生卡方分布的样本值
    gamma 产生Gamma分布的样本值
    unifor 产生在[0,1)中均匀分布的样本值

    在本节数组的创建讲解时就已涉及到随机数函数randn()和randint()的讲解,因此不再举例讲解随机数函数的使用。

    数组文件读写函数

    NumPy可将数组数据进行保存及读取文本文件或二进制文件。磁盘数组数据读写的两个主要函数分别是numpy.save()函数和numpy.load()函数,具体使用示例如下所示:

    In [23]: import numpy as np
    In [24]: arr = np.random.randint(10,size = 20).reshape(4,5)
    In [25]: np.save('array',arr)
    In [26]: array = np.load('array.npy')
    

    上述代码是数组数据读写函数的使用,其中In [24]是创建一个4行5列的随机数组,并将其赋值给变量arr;In [25]是使用save()函数,将数组arr保存到文件名为array.npy的文件中(文件路径末尾未添加扩展名.npy时,系统会自动添加);In [26]是使用load()函数加载数组数据,并将返回的数据赋值给变量array。各变量的运行结果如下所示:

    In [27]: arr
    Out[27]:
    array([[7, 8, 1, 6, 6],
     [9, 8, 8, 7, 9],
     [1, 7, 9, 1, 3],
     [8, 4, 0, 1, 0]])
    In [28]: array
    Out[28]:
    array([[7, 8, 1, 6, 6],
     [9, 8, 8, 7, 9],
     [1, 7, 9, 1, 3],
     [8, 4, 0, 1, 0]])
    

    从上述运行结果可以看出,数据文件读取成功,加载之后的数组数据与保存的数组数据相同。

    相关文章

      网友评论

        本文标题:NumPy基础之数组常用函数(二)

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