Numpy 相关题目
【Python】—— Numpy 初体验
【Python】—— NumPy基础及取值操作
? ?? ?Numpy是基于Python的通用数值计算工具包,其内包含大量数学计算函数和矩阵运算函数。多数科学计算工具包,比如Scipy,和数值分析工具包,比如Pandas、Scikit-learn,都依赖Numpy。利用Numpy,能够高效地对一维数组、矩阵或更高维度的多维数组进行运算,性能比使用Python列表的性能高得多。
? ?? ?Numpy的核心数据结构是ndarray多维数组。本文介绍ndarray多维数组的基本操作。
? ?? ?我们将使用Jupyter Notebook来编写和运行代码。这些代码涉及ndarray多维数组的基本操作。首先,我们要做以下准备工作:
(1) 启动Jupyter Notebook。
(2) 单击进入一个文件夹(比如选择Desktop文件夹)。
(3) 新建一份交互式文档。
(4) 把文档命名为“Numpy-codes”。
(5) 在第1个代码输入框内敲入“import numpy as np”这一行语句。这一语句的作用是引入numpy模块,并把模块名字简写为“np”。
(6) 运行第1个代码输入框的代码。
? ?? ?Jupyter Notebook的使用详述了以上步骤的具体做法。完成以上6个步骤后,浏览器内的Notebook页面如图所示。
? ?? ?在名为“Numpy-codes”的交互式文档(下面简称为Numpy-codes文档)的代码输入框内,敲入如下3行代码,而后按“Shift + Enter”组合键运行这3行代码。
? ?? ?上述3行代码中,第2行代码是调用array函数创建一维数组scores_arr。第3行代码是打印scores_arr的值。这3行代码下面的一行,即“Out[2]: array([98, 88, 72, 65, 49])”,是输出内容。开头的“Out[2]:”是Jupyter Notebook提供的,Out是输出的意思,方括号内的数字2是运行序号,与“In [2]”内的数字2对应,这两个数字2都是指第2次运行。“Out[2]:”之后的内容,即“array([98, 88, 72, 65, 49])”第3行代码产生的输出内容。
? ?? ?需要提醒的是,你的Notebook页面内,代码的运行序号可能和我的运行序号不一致。因为你可以反复多次运行同一个输入框内的代码。每运行一次,运行序号就会加1。
? ?? ?Numpy的arange函数与Python的range函数功能类似。在Numpy-codes文档的代码输入框内敲入以下2行代码,其运行结果如“Out[3]:”开头的一行所示。
? ?? ?调用Numpy的reshape函数可以把一维数组转换成二维数组。在Numpy-codes文档的代码输入框内敲入以下2行代码,其运行结果如“Out[4]:”开头的两行所示。
? ?? ?上述两行代码执行后,nd2是2行3列的矩阵。
? ?? ?调用Numpy的randn函数生成由随机数组成的多维数组。在Numpy-codes文档的代码输入框内敲入以下2行代码,其运行结果如“Out[6]:”开头的5行所示。第1行代码的作用是调用random子模块的randn函数生成5行4列的矩阵。矩阵元素是随机数。第2行代码的作用是打印该随机矩阵。这两行代码分开在两个输入框内敲入,而后依次运行。这样做与把这两行代码合并写在一个输入框内并运行的做法是等价的。
? ?? ?Numpy的ndarray多维数组实质是一个对象。它有shape、dtype和ndim等属性。
? ?? ?承接前面的代码,在Numpy-codes文档的代码输入框内敲入以下1行代码,其运行结果如“Out[8]:”开头的1行所示。这一行代码输出nd2矩阵的shape属性值,即“(2, 3)”,表明nd2是2行3列的矩阵。
? ?? ?在新的输入框内敲入以下1行代码,其运行结果如“Out[9]:”开头的1行所示。这一行代码输出arr矩阵的dtype属性值,也就是元素的类型,即“float64”,表明是64位的浮点数类型。
? ?? ?以下代码输出arr数组的ndim属性值。输出内容为2,表明arr数组是2维的。
? ?? ?Numpy为数组运算和矩阵运算提供了方便好用的函数。下面举例说明部分元素级函数的用法。注意,以下代码承接上面的代码。也就是说,在运行上面的代码之后才能运行下面列出的代码。离开上面的代码,是不能单独运行下面的代码的。
? ?? ?可以通过“矩阵 + 数值”、“矩阵 - 数值”、“矩阵 * 数值”或类似的写法对矩阵的每一个元素进行“+ 数值”、“- 数值”、“* 数值”的运算。例如以下代码使得每一个元素都乘以10。例如,nd2矩阵的第2行第3列是3,而nd2t10矩阵的第2行第3列是3*10=30。
? ?? ?以下代码使得每一个元素都加上2。
? ?? ?以下代码完成两个矩阵对应位置运算相加的运算。
? ?? ?以下代码完成对矩阵每个元素求倒数的运算。
? ?? ?以下代码判别nd2矩阵的每一个元素是否大于8,返回一个真假值组成的矩阵。
? ?? ?对于多维数组,通过下标可以访问到数组元素。
? ?? ?对于上面代码生成的nd2矩阵,以下代码访问到第2行第3列的元素。我们应该猜到,行号和列号都是从0开始的。
? ?? ?访问数组元素也可以采用以下写法。两种写法等价。
? ?? ?下面的代码的作用是得到矩阵的第2行。
? ?? ?利用Python的切片操作,可以获取矩阵的某几行。下面的代码的作用是获取arr矩阵的第3, 4, 5行(行号分别是2, 3, 4)。arr矩阵的定义见前面的代码。
? ?? ?下面的代码的作用是获取arr矩阵的第3, 4, 5行中前两列。
? ?? ?Numpy提供了丰富的统计运算。下面举例说明部分统计运算。
? ?? ?Numpy模块的sum函数能够计算数组元素的总和。
? ?? ?下面的代码计算nd2矩阵的元素总和,把总和赋值给变量t。
? ?? ?下面的代码计算nd2矩阵各行的总和,把结算结果赋值给变量t1。sum函数的第2个参数“axis=1”指明按行累加。
? ?? ?下面的代码计算nd2矩阵各列的总和,把结算结果赋值给变量t0。sum函数的第2个参数“axis=0”指明按列累加。
? ?? ?对于各种统计函数,也能以方法形式调用。例如,下面的代码是调用nd2的sum方法计算nd2矩阵的所有元素的总和,然后把总和赋值给变量t。
? ?? ?多维数组的mean方法用于计算平均值。例如,下面的代码计算nd2所有元素的平均值,然后把平均值赋值给变量m。
? ?? ?下面的代码按行求平均值。
? ?? ?下面的代码按列求平均值。
? ?? ?类似的统计函数还有求最大值函数max、求最小值函数min、求标准差函数std、求方差函数var等等。