NumPy 进阶:矩阵与按轴运算
约 10 分钟
从一维到二维:第一章的 NumPy 数组是一排数(向量),真实数据常常是表格——全班成绩、一张灰度图片。二维数组就是矩阵:
import numpy as np
m = np.array([[88, 92], [75, 81], [90, 85]])
print(m.shape)
shape 返回 (3, 2)——3 行 2 列,3 个学生、每人 2 门成绩。行是「每个同学」,列是「每门功课」,这个约定在全领域通用。
按轴计算是重头戏:m.sum() 把全表加总,但常常只想「按列求平均」——m.mean(axis=0) 沿行的方向压扁,得到每门课的平均分(两个数);axis=1 则得到每个学生的平均分(三个数)。口诀:axis 是「被压扁的那个方向」。《动手学深度学习》预备知识章专门讲这个,因为神经网络的批量计算全靠它。
矩阵乘法是深度学习的发动机:np.dot(a, b) 或 a @ b 做矩阵乘法——它不是逐个元素相乘,而是「行乘列再求和」。线性代数里 说的就是它:权重矩阵 乘输入 得到输出 。白话讲:每个输出都是所有输入的加权混合,神经网络一层干的就是这件事。
切片同样好用:m[0] 取第一行,m[:, 0] 取第一列(所有学生的语文),和列表切片同一套语法,只是多了个维度。
常见误区:混淆 * 和 @——* 是逐元素相乘,@ 才是矩阵乘法,结果完全不同,d2l 里两个都常出现。
练一练:造一个 3 行 2 列的成绩矩阵,用 axis 求每门课平均分和每人平均分。
小纸条
造 3×2 成绩矩阵,用 axis 分别求每科平均和每人平均
登录 后可看答案