文章目录
这门课程涉及到一些 科学计算的基础知识,特别是使用Python中的NumPy科学计算包。 NumPy是Python中用于科学计算的一个重要工具,它提供了一个强大的多维数组对象和各种用于处理这些数组的函数。通过NumPy,我们可以高效地进行 数据操作、数学计算、线性代数等任务,这对于科学计算和数据分析非常有用。
import numpy as np
import time
1.1 目标
在这个实验中,你将:
- 回顾在课程1中使用的NumPy和Python的特性
1.2 有用的参考资料
2 Python 和 NumPy
Python是我们在这门课程中将使用的编程语言。它具有一组数字数据类型和算术操作。NumPy是一个库,它扩展了Python的基本功能,以添加更丰富的数据集,包括更多的数值类型、向量、矩阵和许多矩阵函数。NumPy和Python可以相当无缝地配合使用。Python的算术运算符可以用于NumPy数据类型,许多NumPy函数也将接受Python数据类型。
3 向量
3.1 概要
向量,在这门课程中的使用方式,是有序的数字数组。在表示法上,向量用粗体小写字母表示,如 x \mathbf{x} x。向量的元素都是相同类型的。例如,一个向量不会同时包含字符和数字。数组中元素的数量通常被称为维度,虽然数学家可能更喜欢秩 这个术语。所示的向量具有维度 n n n。向量的元素可以通过索引来引用。在数学环境中,索引通常从1到n。在计算机科学和这些实验中,索引通常从0到n-1。在表示法中,当单独引用向量的元素时,将使用下标表示索引,例如,向量 x \mathbf{x} x 的第 0 0 0 个元素用 x 0 x_0 x0 表示。注意,这种情况下的 x x x 不是粗体。
3.2 NumPy数组
NumPy 的基本数据结构是一个可索引的、n 维的数组,其中包含相同类型(dtype
)的元素。您可能会立即注意到我们已经重载了术语“维度”。上面,它是向量中的元素数量,而这里,维度指的是数组的索引数量。一个一维或 1-D
数组有一个索引。在课程1中,我们将把向量表示为NumPy 1-D数组。
- 1-D数组,形状为 (n,):n个元素,索引范围从[0]到[n-1]
3.3 向量构造
在NumPy中,数据创建函数通常会有一个第一个参数,它是对象的形状。这可以是一个单一的值,用于表示一维结果,也可以是一个元组 (n,m,…),指定结果的形状。下面是使用这些函数创建向量的示例。
# NumPy routines which allocate memory and fill arrays with value
a = np.zeros(4); print(f"np.zeros(4) : a = {
a}, a shape = {
a.shape}, a data type = {
a.dtype}")
a = np.zeros((4,)); print(f"np.zeros(4,) : a = {
a}, a shape = {
a.shape}, a data type = {
a.dtype}")
a = np.random.random_sample(4); print(f"np.random.random_sample(4): a = {
a}, a shape = {
a.shape}, a data type = {
a.dtype}")
# print
np.zeros(4) : a = [0. 0. 0. 0.], a shape = (4,), a data type = float64
np.zeros(4,) : a = [0. 0. 0. 0.], a shape = (4,), a data type = float64
np.random.random_sample(4): a = [0.20091455 0.8554035 0.89419993 0.85645191], a shape = (4,), a data type = float64
一些数据创建例程不接受形状元组:
# NumPy routines which allocate memory and fill arrays with value but do not accept shape as input argument
a = np.arange(4.); print(f"np.arange(4.): a = {
a}, a shape = {
a.shape}, a data type = {
a.dtype}")
a = np.random.rand(4); print(f"np.random.rand(4): a = {
a}, a shape = {
a.shape}, a data type = {
a.dtype}")
# print
np.arange(4.): a = [0. 1. 2. 3.], a shape = (4,), a data type = float64
np.random.rand(4): a = [0.06285392 0.46714606 0.06818969 0.45556927], a shape = (4,), a data type = float64
值也可以手动指定。
# NumPy routines which allocate memory and fill with user specified values
a = np.array([5,4,3,2]); print(f"np.array([5,4,3,2]): a = {
a}, a shape = {
a.shape}, a data type = {
a.dtype}")
a = np.array([5.,4,3,2]); print(f"np.array([5.,4,3,2]): a = {
a}, a shape = {
a.shape}, a data type = {
a.dtype}")
# print
np.array([5,4,3,2]): a = [5 4 3 2], a shape = (4,), a data type = int32
np.array([5.,4,3,2]): a = [5. 4. 3. 2.], a shape = (4,), a data type = float64
这些操作都创建了一个具有四个元素的一维向量 a。a.shape
返回了其维度。在这里我们看到 a.shape = (4,)
,表示一个具有四个元素的一维数组。
3.4 向量的操作
让我们通过向量进行一些操作。
3.4.1 索引
可以通过索引和切片访问向量的元素。NumPy 提供了非常完整的索引和切片功能。我们在这里只探讨课程所需的基础知识。更多详细信息请参考 切片和索引。
索引 意味着通过在数组中的位置引用 一个元素。
切片 意味着根据其索引从数组中获取 子集 元素。
NumPy 从零开始索引,所以向量 a \mathbf{a} a 的第三个元素是 a[2]
。
#vector indexing operations on 1-D vectors
a = np