NumPy 的核心是 ndarray,它是 Python 列表中用于数值数据的快速且内存高效的替代品。NumPy 提供了一系列功能丰富的函数,用于以各种方式生成这些数组,以满足数据分析和机器学习中的不同需求。从现有 Python 数据创建数组创建 NumPy 数组最直接的方法是使用 np.array() 函数,转换现有的 Python 序列型对象,例如列表或元组。import numpy as np # 从 Python 列表创建一维数组 list_data = [1, 2, 3, 4, 5] arr1d = np.array(list_data) print(arr1d) # Output: [1 2 3 4 5] print(arr1d.dtype) # 检查数据类型 # Output: int64 (or int32 depending on your system) # 从列表的列表创建二维数组 nested_list = [[1, 2, 3], [4, 5, 6]] arr2d = np.array(nested_list) print(arr2d) # Output: # [[1 2 3] # [4 5 6]] print(arr2d.shape) # 检查维度(行,列) # Output: (2, 3)NumPy 在创建数组时,会尝试推断最合适的数据类型 (dtype)。但是,您可以使用 dtype 参数明确指定数据类型。这对于控制内存使用和数值精度很重要。# 指定浮点数据类型 arr_float = np.array([1, 2, 3], dtype=np.float64) print(arr_float) # Output: [1. 2. 3.] print(arr_float.dtype) # Output: float64 # 指定布尔数据类型 arr_bool = np.array([0, 1, 2, 0, 3], dtype=bool) print(arr_bool) # Output: [False True True False True] print(arr_bool.dtype) # Output: bool请记住,NumPy 数组是同质的;所有元素必须是相同的数据类型。如果您提供混合类型的数据(例如,整数和浮点数),NumPy 会将它们向上转换(upcast)为可以容纳所有元素的最通用类型(通常是浮点型或对象型)。创建带占位符的数组通常,您需要创建特定大小和形状的数组,但尚未确定最终值,也许是作为稍后填充的占位符。NumPy 为此提供了几个函数:np.zeros(): 创建一个完全由零填充的数组。np.ones(): 创建一个完全由一填充的数组。np.full(): 创建一个填充有指定常数值的数组。np.empty(): 创建一个初始内容是随机的数组,其值取决于内存状态。它比 zeros 或 ones 稍快,因为它避免了填充数组,但您在使用它之前必须明确地为每个元素赋值。所有这些函数都接受一个 shape 参数,通常是一个指定数组维度的元组(例如,2D 数组的 (行, 列)),以及一个可选的 dtype 参数。# 创建一个 3x4 的零数组(默认为 float64) zeros_arr = np.zeros((3, 4)) print(zeros_arr) # Output: # [[0. 0. 0. 0.] # [0. 0. 0. 0.] # [0. 0. 0. 0.]] # 创建一个包含 5 个整数类型的一维数组 ones_arr = np.ones(5, dtype=np.int32) print(ones_arr) # Output: [1 1 1 1 1] # 创建一个填充值为 99 的 2x2 数组 full_arr = np.full((2, 2), 99) print(full_arr) # Output: # [[99 99] # [99 99]] # 创建一个未初始化的 2x3 数组 empty_arr = np.empty((2, 3)) print(empty_arr) # 值将是任意的 # Output(示例,会因系统而异): # [[6.95190771e-310 6.95190771e-310 6.95190771e-310] # [6.95190771e-310 0.00000000e+000 0.00000000e+000]]这些函数在机器学习中经常使用,例如,在训练模型之前初始化权重矩阵或创建结果数组。创建序列数组NumPy 提供了类似于 Python 内置 range 函数的函数,但设计用于直接生成 NumPy 数组:np.arange(): 返回给定区间内均匀分布的值。它接受 start、stop 和 step 参数,类似于 range。请注意,stop 值是不包含在内的。np.linspace(): 在指定区间内返回均匀分布的数字。它接受 start、stop 和 num(要生成的样本数)参数。重要的是,stop 值默认是包含在内的。# 一个从 0 到 10(不包括 10)的数组 arr_range = np.arange(10) print(arr_range) # Output: [0 1 2 3 4 5 6 7 8 9] # 一个从 2 到 10(不包括 10),步长为 2 的数组 arr_range_step = np.arange(2, 10, 2) print(arr_range_step) # Output: [2 4 6 8] # 0 到 1 之间(包括 1)的 5 个均匀分布的值 arr_linspace = np.linspace(0, 1, 5) print(arr_linspace) # Output: [0. 0.25 0.5 0.75 1. ] # 0 到 5 之间(包括 5)的 10 个均匀分布的值 arr_linspace_2 = np.linspace(0, 5, 10) print(arr_linspace_2) # Output: [0. 0.55555556 1.11111111 1.66666667 2.22222222 2.77777778 # 3.33333333 3.88888889 4.44444444 5. ]linspace 在您需要特定数量的点均匀分布在一个区间内时特别有用,例如,在为绘图函数生成坐标时。创建随机值数组在机器学习中,生成包含随机数的数组对于各种任务来说是不可或缺的,例如初始化模型参数、生成合成数据或打乱数据集。NumPy 的 random 子模块为此提供了许多函数:np.random.rand(): 创建一个指定形状的数组,并用 [0, 1) 区间上均匀分布的随机样本填充它。np.random.randn(): 创建一个指定形状的数组,并用标准正态分布(均值 0,方差 1)的随机样本填充它。np.random.randint(): 返回指定 low(包含)到 high(不包含)边界之间的随机整数。您还可以指定输出数组的 size(形状)。np.random.seed(): 用于设置随机种子,这使得随机数生成可预测。这对于实验的可复现性很重要。# 设置种子以保证可复现性 np.random.seed(42) # 创建一个 2x3 数组,其随机值来自均匀分布 [0, 1) rand_arr = np.random.rand(2, 3) print(rand_arr) # Output: # [[0.37454012 0.95071431 0.73199394] # [0.59865848 0.15601864 0.15599452]] # 创建一个 3x2 数组,其随机值来自标准正态分布 randn_arr = np.random.randn(3, 2) print(randn_arr) # Output: # [[ 0.05808361 -0.75634998] # [-0.34791215 0.1579198 ] # [ 0.45615031 0.99712472]] # 生成 5 个介于 1(包含)和 10(不包含)之间的随机整数 randint_arr = np.random.randint(1, 10, size=5) print(randint_arr) # Output: [8 4 6 8 8] # 生成一个 2x4 数组,其随机整数介于 0(包含)和 5(不包含)之间 randint_arr_2d = np.random.randint(0, 5, size=(2, 4)) print(randint_arr_2d) # Output: # [[3 0 2 3] # [1 1 4 2]]其他创建方法NumPy 还包含用于创建特定类型数组的函数:np.eye(): 创建一个二维单位矩阵(对角线上为 1,其他位置为 0)。np.diag(): 可以提取现有二维数组的对角线,或创建一个在对角线上具有指定值的二维数组。# 创建一个 3x3 单位矩阵 identity_matrix = np.eye(3) print(identity_matrix) # Output: # [[1. 0. 0.] # [0. 1. 0.] # [0. 0. 1.]] # 创建一个对角线上为 [1, 2, 3] 的二维数组 diag_matrix = np.diag([1, 2, 3]) print(diag_matrix) # Output: # [[1 0 0] # [0 2 0] # [0 0 3]]掌握这些数组创建方法是有效使用 NumPy 的第一步。选择正确的方法取决于您是在转换现有数据、需要占位符、需要特定序列,还是需要为模拟或初始化生成随机数据。借助这些工具,您可以高效地构建 ndarray 对象,它们构成了 Python 中机器学习数值运算的基础。