向量是数字的有序列表,在表示数据点或特征时很有用。对于Python中的数值计算,特别是线性代数,NumPy库是标准工具。使用NumPy表示向量非常自然。一个数学向量,如 $v = [v_1, v_2, \dots, v_n]$,直接对应于一个一维NumPy数组 (ndarray)。这种数组结构为数值运算做了优化,使其高效地完成机器学习中常见的计算。使用 np.array 创建向量在NumPy中创建向量的主要方法是使用 np.array() 函数,向其传入一个包含向量元素的Python列表。首先,确保你已导入NumPy。常规方法是:import numpy as np现在,让我们创建几个向量。如果我们想表示二维平面中的一个点,例如 $(2, 5)$,我们可以像这样创建向量:# 一个包含2个元素的向量 vec_2d = np.array([2, 5]) print(vec_2d)此代码创建了一个NumPy数组 vec_2d,包含元素2和5。输出将是:[2 5]类似地,可以创建三维空间中的向量,例如 $(1.5, -3.2, 0.7)$:# 一个包含浮点数的3元素向量 vec_3d = np.array([1.5, -3.2, 0.7]) print(vec_3d)输出:[ 1.5 -3.2 0.7]NumPy根据输入列表自动推断数组元素的数据类型(例如,整数为 int64,浮点数为 float64)。如果你的列表包含整数和浮点数的混合,NumPy通常会将整数提升为浮点数以保持数组内部的一致性。你也可以使用 np.array() 中的 dtype 参数来显式控制数据类型。指定 dtype 在控制内存使用或保证数值精度方面很有用。# 显式创建32位整数向量 vec_int32 = np.array([10, 20, 30], dtype=np.int32) print(vec_int32) print(vec_int32.dtype)输出:[10 20 30] int32使用NumPy函数创建向量正如我们在学习通用NumPy数组时所看到的(第2章),你也可以使用辅助函数来初始化向量。当你知道所需向量的大小但还没有具体的值时,这通常很方便。# 创建一个包含四个零的向量 zero_vector = np.zeros(4) print("零向量:", zero_vector) # 创建一个包含三个一的向量 one_vector = np.ones(3) print("一向量:", one_vector) # 创建一个包含数字序列(0到4)的向量 sequence_vector = np.arange(5) print("序列向量:", sequence_vector)输出:Zero vector: [0. 0. 0. 0.] One vector: [1. 1. 1.] Sequence vector: [0 1 2 3 4]请注意,np.zeros 和 np.ones 默认创建浮点数向量。访问向量元素使用这些NumPy向量感觉类似于使用Python列表。你可以使用从零开始的索引访问单个元素(第一个元素在索引0,第二个在索引1,依此类推)。# 创建一个示例向量 data_vector = np.array([11, 22, 33, 44, 55]) # 获取第一个元素 first_element = data_vector[0] print(f"第一个元素:{first_element}") # 输出:11 # 获取第三个元素 third_element = data_vector[2] print(f"第三个元素:{third_element}") # 输出:33 # 修改一个元素 data_vector[1] = 25 # 改变第二个元素 print(f"修改后的向量:{data_vector}") # 输出:[11 25 33 44 55]熟悉创建这些一维NumPy数组是在代码中应用线性代数思想的第一步。这些数组对象不仅仅是数字的容器;它们是NumPy构建高效数学运算的根基,正如我们将在接下来的关于向量加法、标量乘法、范数和点积的章节中看到的那样。