一、目录
- 多维数组(ndarray)
- Numpy 向量化运算与广播机制
- Numpy 数组的变形与合并
- AI 数据预处理必备:Numpy 统计函数
- 总结与测试
二、多维数组(ndarray)
ndarray 是 Numpy 的核心数据结构,对应 AI 中的「标量(0 维)、向量(1 维)、矩阵(2 维)、张量(3 维及以上,大模型中常用)」
1. 创建 ndarray(AI 常用创建方法)
(1)从 Python 列表转换(入门必备): np.array()
# 1维数组(向量):对应AI中的特征向量、标签向量
vec = np.array([1, 2, 3, 4, 5])
# 2维数组(矩阵):对应AI中的样本-特征矩阵(每行一个样本,每列一个特征)
mat = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 3维数组(张量):对应AI中的图像数据(高度×宽度×通道数)、时序数据
tensor = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
# 查看数组属性(AI中常用,用于验证数据形状是否符合要求)
print("向量形状:", vec.shape) # 输出 (5,):1维,长度5
print("矩阵形状:", mat.shape) # 输出 (3, 3):2维,3行3列
print("张量形状:", tensor.shape) # 输出 (2, 2, 2):3维,2个2×2的矩阵,第一个表示几个维度,第二个表示每个维度的矩阵行数,第三个表示每个维度的矩阵列数
print("数组维度:", tensor.ndim) # 输出 3:维度数
print("数组元素类型:", mat.dtype) # 输出 int64:元素数据类型(AI中常用float32/float64)
(2)快速创建特殊数组(AI 实战高频)
# 1. 全0数组:用于初始化模型参数、占位符
zeros_mat = np.zeros((3, 4)) # 创建3行4列的全0矩阵
print("全0矩阵:\n", zeros_mat)
# 2. 全1数组:用于偏置项初始化、归一化处理
ones_vec = np.ones((5,)) # 创建长度为5的全1向量
print("全1向量:\n", ones_vec)
# 3. 单位矩阵:线性代数运算必备(对角线为1,其余为0),AI中用于参数初始化、矩阵求逆
eye_mat = np.eye(4) # 创建4阶单位矩阵
print("单位矩阵:\n", eye_mat)
# 4. 随机数组(AI中最重要!用于模型参数初始化、数据增强)
# 4.1 均匀分布随机数(取值范围[0,1))
rand_uniform = np.random.rand(3, 3) # 3行3列均匀分布随机矩阵
# 4.2 标准正态分布随机数(均值0,方差1)
rand_normal = np.random.randn(3, 3) # 3行3列标准正态分布随机矩阵(AI参数初始化首选)
# 4.3 指定范围的随机整数
rand_int = np.random.randint(0, 10, (2, 4)) # 取值[0,10),2行4列随机整数矩阵
print("均匀分布随机矩阵:\n", rand_uniform)
print("标准正态分布随机矩阵:\n", rand_normal)
# 5. 等差数列:用于生成数据标签、区间采样
arr_arange = np.arange(0, 10, 2) # 从0开始,步长2,到10结束(不包含10)
arr_linspace = np.linspace(0, 1, 5) # 从0到1,均匀生成5个点(包含首尾,AI中用于采样)
print("等差数列(arange):\n", arr_arange)
print("等差数列(linspace):\n", arr_linspace)
2. 数组索引与切片(AI 中用于数据筛选、样本提取)
# 先创建一个2维矩阵(样本-特征矩阵:3个样本,4个特征)
data = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
# 1. 一维索引(取某一行/某一列)
first_sample = data[0] # 取第1个样本(第0行,AI中样本索引从0开始)
third_feature = data[:, 2] # 取第3个特征(所有行的第2列,":"表示取全部)
print("第1个样本:\n", first_sample)
print("第3个特征:\n", third_feature)
# 2. 切片(取批量样本/批量特征)
first_two_samples = data[0:2, :] # 取前2个样本(行0~1,所有列)
last_two_features = data[:, 2:] # 取后2个特征(所有行,列2~3)
print("前2个样本:\n", first_two_samples)
print("后2个特征:\n", last_two_features)
# 3. 条件索引(AI中用于数据筛选,如筛选标签为1的样本)
scores = np.array([85, 92, 78, 90, 88])
pass_scores = scores[scores >= 85] # 筛选出分数≥85的成绩
print("及格分数(≥85):\n", pass_scores)
三、Numpy 向量化运算与广播机制
1. 向量化运算(AI 效率的关键)
Numpy 数组支持向量化运算,无需写 for 循环,效率极高(大模型处理亿级数据时,这是必备能力)
# 示例:两个向量的运算(AI中特征向量的加减乘除)
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 1. 元素级运算(对应位置元素运算)
add_ab = a + b # 加法
sub_ab = a - b # 减法
mul_ab = a * b # 乘法(元素级,非矩阵乘法!)
div_ab = a / b # 除法
pow_ab = a ** 2 # 平方(每个元素各自平方)
print("向量加法:\n", add_ab)
print("向量元素级乘法:\n", mul_ab)
# 2. 矩阵运算(AI核心:矩阵乘法,对应大模型中的张量相乘)
# 注意:矩阵乘法要求第一个矩阵的列数 = 第二个矩阵的行数
mat1 = np.array([[1, 2], [3, 4]])
mat2 = np.array([[5, 6], [7, 8]])
# 两种实现方式(AI中常用第一种)
mat_mul1 = np.dot(mat1, mat2) # 矩阵乘法(兼容所有维度)
mat_mul2 = mat1 @ mat2 # 矩阵乘法(Python3.5+支持,语法更简洁)
print("矩阵乘法结果:\n", mat_mul1)
# 3. 常用数学函数(向量化,直接作用于所有元素,AI中用于数据预处理、激活函数)
arr = np.array([1, 2, 3, 4])
print("正弦值:\n", np.sin(arr)) # 正弦函数
print("余弦值:\n", np.cos(arr)) # 余弦函数
print("指数值:\n", np.exp(arr)) # 指数函数(AI中softmax激活函数的基础)
print("对数值:\n", np.log(arr)) # 自然对数(AI中损失函数计算的基础)
print("绝对值:\n", np.abs(np.array([-1, -2, 3]))) # 绝对值
2. 广播机制(AI 中处理不同形状数组运算的核心)
当两个数组形状不同时,Numpy 会自动触发广播机制,将数组扩展到相同形状后再进行运算,无需手动对齐形状(如:给所有样本的特征向量加上同一个偏置项)。
# 示例1:标量与数组运算(广播标量到整个数组)
arr = np.array([[1, 2], [3, 4]])
arr_add_10 = arr + 10 # 标量10广播为2×2的矩阵,再与arr相加
print("数组加标量(广播):\n", arr_add_10)
# 示例2:1维数组与2维数组运算(AI中常用:给每个样本的特征向量加偏置项)
mat = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 3×3矩阵(3个样本,3个特征)
bias = np.array([10, 20, 30]) # 1×3向量(3个特征对应的偏置项)
mat_add_bias = mat + bias # bias广播为3×3矩阵,每行都是[10,20,30]
print("矩阵加偏置(广播):\n", mat_add_bias)
四、Numpy 数组的变形与合并
1. 数组变形(reshape):AI 中用于调整数据形状(如:将图像展平为特征向量)
# 示例:将3×4的矩阵变形为2×6的矩阵,或展平为1维向量
mat = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
# 变形为2×6矩阵(注意:总元素数必须相等,3×4=12,2×6=12)
mat_reshape1 = mat.reshape(2, 6)
# 变形为1维向量(AI中用于将图像(28×28)展平为784维特征向量)
mat_flatten1 = mat.reshape(-1) # -1表示自动计算该维度的大小
mat_flatten2 = mat.flatten() # 另一种展平方法(更直观)
# 变形为4×3矩阵(指定一个维度为-1,自动计算另一个维度)
mat_reshape2 = mat.reshape(4, -1)
print("变形为2×6矩阵:\n", mat_reshape1)
print("展平为1维向量:\n", mat_flatten1)
2. 数组合并(AI 中用于合并样本、合并特征)
# 先创建两个矩阵
mat1 = np.array([[1, 2], [3, 4]])
mat2 = np.array([[5, 6], [7, 8]])
# 1. 横向合并(列合并,增加特征数,AI中用于合并不同特征集)
mat_hstack = np.hstack((mat1, mat2))
mat_concat_h = np.concatenate((mat1, mat2), axis=1) # axis=1表示横向(列方向)
print("横向合并:\n", mat_hstack)
# 2. 纵向合并(行合并,增加样本数,AI中用于合并不同样本集)
mat_vstack = np.vstack((mat1, mat2))
mat_concat_v = np.concatenate((mat1, mat2), axis=0) # axis=0表示纵向(行方向)
print("纵向合并:\n", mat_vstack)
五、AI 数据预处理必备:Numpy 统计函数
# 示例:模拟一份样本数据(5个样本,3个特征)
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]])
# 1. 常用统计函数(axis参数:指定统计维度,AI中关键)
# axis=0:按列统计(对每个特征统计,如所有样本的第1个特征的均值)
# axis=1:按行统计(对每个样本统计,如每个样本的3个特征的均值)
print("所有元素的均值:", np.mean(data))
print("按列(特征)求均值:", np.mean(data, axis=0))
print("按行(样本)求方差:", np.var(data, axis=1))
print("按列(特征)求最大值:", np.max(data, axis=0))
print("按列(特征)求最小值:", np.min(data, axis=0))
print("按列(特征)求总和:", np.sum(data, axis=0))
print("按列(特征)求中位数:", np.median(data, axis=0))
# 2. AI核心预处理:标准化(Z-Score Normalization)
# 公式:(x - 均值) / 方差,将数据转换为均值0、方差1的分布(大模型训练必备)
data_mean = np.mean(data, axis=0) # 每个特征的均值
data_std = np.std(data, axis=0) # 每个特征的标准差
data_standardized = (data - data_mean) / data_std # 广播机制自动对齐
print("标准化后的数据:\n", data_standardized)
print("标准化后按列均值(接近0):", np.mean(data_standardized, axis=0))
print("标准化后按列标准差(接近1):", np.std(data_standardized, axis=0))
2026.01.02 下午 3点
信息家