强基初中数学&学Python——第225课 数字和数学第三方模块NumPy:菜鸟入门(1)

  写在最前面  NumPy是Python中科学计算的基本包。它是一个Python库,提供了多维数组对象、各种派生对象(如掩码数组和矩阵),以及一系列用于对数组进行快速操作的例程,包括数学、逻辑、形状操作、排序、选择、I/O、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等。
  欢迎来到NumPy  NumPy(Numerical Python)是一个开放源码的Python库,几乎可用于科学和工程的每个领域。它是在Python中处理数字数据的通用标准,也是科学Python和PyData生态系统的核心。NumPy用户包括所有人,从最初的程序员到从事最先进科学和工业研究与开发的经验丰富的研究人员。NumPy API广泛用于Pandas、SciPy、Matplotlib、scikit learn、scikit image和大多数其他数据科学和科学Python包。  NumPy库包含多维数组和矩阵数据结构(您将在后面的章节中找到有关此的更多信息)。它为ndarray(一个同质的n维数组对象)提供了有效操作的方法。NumPy可用于对数组执行各种数学运算。它为Python添加了强大的数据结构,保证了使用数组和矩阵进行高效计算,并提供了一个庞大的高级数学函数库,可对这些数组和矩阵执行运算。
  安装NumPy  要安装NumPy,我们强烈建议使用科学的Python发行版。如果您正在查找在操作系统上安装NumPy的完整说明,请参阅安装NumPy。如果您已经有Python,可以使用以下命令安装NumPy:

conda install numpy

或者

pip install numpy

  如果你还没有Python,你可以考虑使用Anaconda。这是最简单的开始方式。获得此发行版的好处是,您不必太担心单独安装NumPy或用于数据分析的任何主要软件包,如panda、Scikit Learn等。
  导入NumPy  要访问NumPy及其函数,请先将其导入Python代码,如下所示:

import numpy as np

  我们使用NumPy将导入的名称缩短为np,以提高代码的可读性。这是一个被广泛采用的惯例,您应该遵循它,以便任何使用您的代码的人都可以轻松地理解它。
  阅读NumPy代码  如果你还不习惯阅读包含大量代码的教程,你可能不知道如何解释如下代码块:

>>> a = np.arange(6)
>>> a2 = a[np.newaxis, :]
>>> a2.shape
(1, 6)

  也许你不太熟悉这种风格,不过它很容易理解的。前面是>>>的行表示输入代码或数据;前面没有>>>的所有内容都是输出,或者是运行代码的结果。这是你在命令行上运行python时看到的样式,但如果你使用的是IPython,则可能会看到不同的样式。请注意,“>>>”不是代码的一部分,如果键入或粘贴到Python外壳(shell)中,将导致错误,忽略“>>>”就没问题了。
  Python列表(list)和NumPy数组(array)的区别  NumPy为您提供了大量快速高效的方法来创建数组并在其中处理数值数据。Python列表可以在单个列表中包含不同的数据类型,与之不同,NumPy数组中的所有元素都应该是同质的。因为如果数组不是均匀的,那么在数组上执行的数学运算将非常低效。  NumPy用数组的理由:NumPy数组比Python列表更快、更紧凑。数组消耗更少的内存,使用方便。NumPy使用更少的内存来存储数据,它提供了一种指定数据类型的机制。这使得代码可以进一步优化。
  什么是数组  数组是NumPy库核心的数据结构。数组是一个数值网格,它包含有关原始数据、如何定位元素以及如何解释元素的信息。它有一个可以以各种方式索引的元素网格。这些元素都属于同一数据类型,称为数组的数据类型(dtype)。  数组可以通过非负整数元组、布尔值、另一个数组或整数进行索引。数组的秩(rank)是维数(dimensions)。数组的形状(shape)是一个整数元组,给出每个维度的一维数组的大小(size)。  有一种常用的方法,我们可以通过普通Python列表初始化NumPy一维数组,使用嵌套列表来初始化二维或更高维的数组。  例如:

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

又:

>>> a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

  和Python列表一样,我们可以使用方括号([])访问数组中的元素。当你访问元素时,请记住NumPy中的索引从0开始。这意味着如果你想访问数组中的第一个元素,你将访问元素“0”。例如,访问上面第二个数组的第一个元素:

>>> print(a[0])
[1 2 3 4]

  有关数组的更多知识  NumPy中的数组,包括一维数组(1D array)、二维数组(2D array)、N维数组(ndarray)、矢量(vector)和矩阵(matrix)。  你可能偶尔会接触到一个被称为“ndarray”的数组,它是“N维数组”的缩写。N维数组只是一个具有任意维数的数组。你可能还会接触到1-D或一维数组、2-D维或二维数组等。NumPy的ndarray类用于统一表示矩阵和矢量。矢量是一个一维数组(行矢量和列矢量之间没有区别),而矩阵是指二维数组。对于三维或更高维数组,张量(tensor)一词也常用。  数组的属性(attributes)是什么?  数组通常是相同类型和大小的项目(item)的固定大小的数据容器(container)。数组中维度和项目的数量由其形状定义。数组的形状是一个非负整数的元组,用于指定每个维度的大小。  NumPy中,维度称为轴。例如,一个2D数组:

[[0., 0., 0.],
 [1., 1., 1.]]

  这个数组有2个轴。第一轴(最外层)的长度为2,第二轴的长度是3。  与其他Python数据容器对象一样,可以通过索引或切片数组来访问和修改数组的内容。与典型的容器对象不同,不同的数组可以共享相同的数据,因此对一个数组所做的更改可能在另一个数组中可见。请看下面的代码:  数组属性反映数组本身固有的信息。如果需要获取或设置已有数组的属性值(properties),通常可以通过其属性(attributes)访问该数组。  在这里(https://numpy.org/doc/stable/reference/arrays.ndarray.html#arrays-ndarray)阅读有关数组属性的更多信息,还可以在这里(https://numpy.org/doc/stable/reference/arrays.html#arrays)了解数组对象。