numpy 基本使用

前言

Numpy是python中的科学计算工具包,提供了一个多维数组对象,用于多维数组或者矩阵的快速运算,包括线性代数基本运算,快速傅里叶变换,基本统计运算随机模拟等。在机器学习中涉及到大量的矩阵知识,熟练使用numpy包有利于快速理解并实现机器学习中的相关算法。Numpy有以下特性:

  • numpy创建的多维数组(narray)拥有固定的大小,不像python中的列表(list),是可以动态增加的。改变numpy创建的多维数组的大小,会删除原来的多维数组,并创建一个新的数组。
  • numpy创建的数组所有元素的类型必须是保持一致,并且在内存中拥有同样的大小。当numpy中的元素是对象时,可以拥有不同的大小和。

numpy包的安装

numpy包的安装可以直接使用以下命令:

pip install numpy

numpy的基本使用

  • 用numpy创建数组
    创建一个一维数组,如下代码所示,
import numpy as np
data = np.array([1,2,3])

其结果如下所示:


一维数组

与一维数组的创建类似,多维数组的创建如下所示:


data = np.array([[1,2,3],[4,5,6]])

其结果如下所示:


多维数组

使用numpy可以将一维数组转换为指定形状的多维数组,如下所示,将拥有24个元素的一维数组转换为的3维数组:

data = np.arange(24).reshape(2,3,4)
print(data)

除了常规的矩阵创建,在一些算法中,用到了大量的特殊矩阵,比如,单位矩阵,零矩阵等。单位矩阵的创建如下所示,其中,参数k代表除了第k条对角线的元素为1之外,其他全为0:

data_0 = np.eye(3)
data_1 = np.eye(3,k=1)
单位矩阵

除了单位矩阵外,numpy也提供了一些特殊的方法用以创建一些特殊矩阵,如下所示:


  • 查看多维数组的基本属性
    numpy提供了大量方法用来查看创建的多维数组的基本属性,如下所示:
  1. 查看多维数组的维数


  1. 查看多维数组的形状,如下所示:


  2. 查看多维数组的大小,即返回多维数组所有元素的个数


  3. 查看多维数组的类型,返回数组中元素的类型,在创建数组是可以用特定参数指定元素的类型, 可以使用标准Python类型创建或指定dtype。 此外,numpy还提供自己的类型。 numpy.int32,numpy.int16和numpy.float64就是一些基本例子。


  • 多维数组的一些基本形状操作
    numpy提供了丰富的方法用来改变多维数组的形状,平时主要用到以下几种,如下所示:
  1. 将多维数组转换为一维数组,numpy提供了ravel()方法将多维数组可以转换为一维数组,如下所示:


  2. 在矩阵的运算中涉及到大量的转置运算,numpy提供了两种方法可以实现矩阵的转置操作,一种是narray.transpose() ,如下所示



    而另一种是narray.T,两种方法都具有同样的效果

  3. numpy也提供了一些方法用以实现多维数组的合并,按照其合并形式可以分为按行合并与按列合并,使用以下方法可以实现按行合并,



    同理,按行合并可以用以下方法实现:


  4. numpy除了提供了矩阵的合并方法外,还提供了用于将大矩阵分割为小矩阵的方法,与矩阵合并类似,矩阵分割也分为按行分割和按列分割。如下所示,分别表示按列分割和按行分割:


  • 多维数组的排序相关操作
    numpy也为多维数组的排序操作提供了相关方法,除了基本的排序操作,也提供求矩阵最大最小元素的相关方法,如下所示:
  1. 求多维数组的最大值(最小值)
    numpy提供了一下方法用以求多维数组最大(或最小值的)的下标,如下所示,参数axis=0,表示求每一列最大值的下标,axis=1表示每一行最大值的下标,有axis参数时,返回值构成一个新的数组,而没有axis参数的默认情况下,argmax()将多维数组看成是一维数组,返回值是最大值在在一维数组中的下标。

如果,不想将多维数组看成是一维数组处理,可以用以下方法获得多维数组的下标,如下所示:


多维数组最小值的处理方法与最大值基本相同,在此,不再多做介绍。获得多维数组的最大或者最小值,可以直接使用max()或者min()方法。

  1. numpy的排序操作
    numpy提供了一些用来给多维数组排序的操作,与求取最大最小值的方法类似,有返回数组元素和数组下标的两种方法,分别是sort()argsort()方法,与max()argmax()使用方法基本相同,在此也不多做介绍,值得注意的是,argsort()方法仍然是将多维数组按照一维数组处理的,要返回多维数组的下标,可以使用unravel_index()方法。
  • numpy的基本统计运算
    numpy提供了大量的方法用于基本的统计运算,而这些方法对于机器学习相关算法的理解和运行至关重要,numpy在统计学中的运用主要有以下几种:
  1. 协方差
    协方差表示两个变量一起变化的水平,如果我们检查N维样本,X = [x_1,x_2,... x_N] ^ T,则协方差矩阵元素C_ {ij}是x_i和x_j的协方差。 元素C_ {ii}是x_i的方差,numpy中使用cov()计算矩阵的协方差,其基本使用方法如下所示,通过计算结果,可以清楚看到,x第一行与第二行变化的快慢
  1. 均值计算
    numpy提供了一个mean()方法用来计算矩阵的均值,此外,参数axis=0代表按列求取均值,axis=1表示按行求取均值,基本使用方法如下所示:

  2. 计算矩阵的标准差
    numpy提供了std()方法用来计算矩阵标准差,与求矩阵均值类似,axis=0代表按列求取,而axis=1代表按行求取,具体使用方法,如下所示:

  3. 计算矩阵方差
    numpy提供var()方法用来计算矩阵方差,使用方法与标准差基本一样,在此不再多做介绍。

  • numpy中的基本线性代数运算
    矩阵在线性代数中的运用非常重要,numpy作为python中的多维数组库,提供了大量方法处理线性代数相关运算。
  1. 计算两个向量(数组)的叉积
    两个向量的的叉积常用cross()方法用来计算,其基本使用方法如下所示:

  2. 计算两个矩阵的点积,矩阵的点积计算相当于矩阵乘法,需要注意的是,矩阵点积计算必须遵循矩阵乘法运算原则。除此之外,复数的乘法可以使用点积进行计算,如下所示:


  3. 如下所示,可以通过outer()方法计算两个向量的外积

总结

通过以上介绍,大体了解了numpy的一些常用方法。当然,对numpy熟练使用需要更多的实践和练习,对numpy更高级的方法的使用和理解需要更为深厚的数学基础,尤其是要对线性代数和统计学的知识有更多地理解。对numpy库的更多了解可以参考numpy文档

你可能感兴趣的:(numpy 基本使用)