批改及建议
4. 正确但不够规范
应用np.eye(3)
或np.identity(3)
生成单位矩阵,避免手动输入。
5. 范围错误
np.arange(0,100,20)
生成 [0,20,40,60,80]
(不包含100)。应用 np.linspace(0,100,5)
得到 [0,25,50,75,100]
。
6. 未完成
正确代码:
arr6 = np.array([1,2,3]).reshape(3,1) # 或 [:, np.newaxis]
7. 未完成
正确代码:
arr7 = np.random.rand(5,5)
8. 错误
arr5 = float(arr5)
会报错(数组不能直接转float)。应:
arr5 = arr5.astype(np.float64)
9. 未完成
正确方法:
arr4_flat = arr4.flatten() # 或 arr4.ravel()
10. 错误
列表没有 .describe
方法,应使用 NumPy 函数:
print(np.sum(arr7), np.mean(arr7), np.std(arr7))
11-12. 未完成
- 水平堆叠:
np.hstack((arr1, arr2))
- 垂直堆叠:
np.vstack((arr1, arr2))
13. 未完成
正确代码:
arr13 = np.array([1,2,3,4])[::-1] # 或 np.flip(arr)
14. 部分正确
若 arr14
是列表,.max()
和 .min()
有效;建议转为 NumPy 数组更规范。
15. 错误
正确代码:
arr15 = np.array([True, False, True]).astype(int)
16. 未完成
正确代码:
arr16 = np.round([1.2, 3.5, 5.7])
17. 语法错误
正确代码:
arr17 = np.ones((2,3,4)) # 参数需为元组
18. 未完成
正确代码:
arr18 = np.tile([[1,2],[3,4]], (2,3))
19. 未完成
正确代码(假设是 NumPy 数组):
result = arr1 + arr2
20. 范围错误
np.arange(0,1,10)
生成 [0]
。正确方法:
arr20 = np.linspace(0,1,10)
需要加强记忆的点
-
NumPy 专用函数
- 单位矩阵用
np.eye()
或np.identity()
。 - 等间距数组用
np.linspace()
(包含终点),np.arange()
不包含终点。
- 单位矩阵用
-
数组形状操作
- 使用
reshape()
、flatten()
或np.newaxis
调整维度。 - 堆叠用
np.hstack()
/np.vstack()
或np.tile()
重复数组。 np.hastack()
是横向堆叠,就是说,列数没有改变np.vstack()
是竖向堆叠,也就是行数没有改变
- 使用
-
数据类型转换
- 用
.astype()
转换数据类型,避免直接强制类型转换(如float(arr)
)。
- 用
-
随机数组生成
- 用
np.random.rand()
生成 [0,1) 的均匀分布数组。
- 用
-
数值计算函数
- 使用
np.sum()
、np.mean()
、np.std()
代替列表原生方法。
- 使用
-
布尔数组处理
- 用
.astype(int)
将布尔值转为 1/0。
- 用
-
三维数组创建
- 注意参数需为元组(如
np.ones((2,3,4))
)。
- 注意参数需为元组(如
-
反转数组
- 用切片
[::-1]
或np.flip()
。
- 用切片
以下是针对练习错误和当前水平整理的 Numpy 核心用法讲解,从基础到进阶分层说明:
一、Numpy 核心概念
1. 数组创建
- 错误修正:不要手动输入矩阵(如问题4),用专用函数
- 重点函数:
np.array([1,2,3]) # 从列表创建 np.zeros(3) # 全0数组 [0.,0.,0.] np.ones((2,3)) # 全1矩阵(注意形状用元组) np.eye(3) # 3x3单位矩阵(对角线为1) np.linspace(0,100,5) # 等分数列 [0,25,50,75,100](包含终点) np.arange(0,100,20) # [0,20,40,60,80](不包含终点) np.random.rand(5,5) # 5x5的0~1随机矩阵
2. 数组形状操作
- 你的痛点:维度转换(如问题6)、展平(问题9)
arr = np.array([1,2,3]) arr.reshape(3,1) # 转3x1二维数组(必须总元素数匹配) arr[:, np.newaxis] # 效果同上(更灵活)
-np.newaxis常常用于将一个一维数组转化为二维数组,或者将二维数组转化为三维数组等。它本质上是一个占位符,表示我们想要在某个位置插入一个新的轴。
arr.flatten() # 展平为一维(如问题9)
3. 数学计算
- 关键点:必须用 NumPy 函数操作数组(如问题10)
arr = np.array([1,2,3,4]) np.sum(arr) # 和 → 10 np.mean(arr) # 均值 → 2.5 np.std(arr) # 标准差 → 1.118(默认ddof=0,总体标准差) np.std(arr, ddof=1) # 样本标准差 → 1.291
二、你的易错点强化
1. 数据类型转换
- 错误:
arr5 = float(arr5)
❌ - 正确:使用
.astype()
方法(问题8):arr = np.array([1,2,3], dtype=np.int32) arr_float = arr.astype(np.float64) # 转换为浮点数
2. 数组堆叠
- 水平 vs 垂直(问题11-12):
a = np.array([1,2,3]) b = np.array([4,5,6]) np.hstack((a,b)) # → [1,2,3,4,5,6](水平拼接) np.vstack((a,b)) # → [[1,2,3], [4,5,6]](垂直堆叠)
3. 数组反转
- 简单方法(问题13):
arr = np.array([1,2,3,4]) reversed_arr = arr[::-1] # → [4,3,2,1]
4. 布尔转整数
- 正确做法(问题15):
bool_arr = np.array([True, False, True]) int_arr = bool_arr.astype(int) # → [1,0,1]
三、实用技巧提升
1. 重复数组
- 问题18 的解法:
np.tile()
arr = np.array([[1,2],[3,4]]) np.tile(arr, (2,3)) # 行重复2次,列重复3次
2. 元素级运算
- 问题19 的本质:NumPy 的广播机制
a = np.array([1,2,3]) b = np.array([4,5,6]) a + b # → [5,7,9](逐元素相加)
3. 三维数组创建
- 形状参数必须为元组(问题17):
np.ones((2,3,4)) # 正确(2层,每层3行4列)
四、练习题建议
根据你的错误,推荐以下练习顺序:
- 基础创建:用不同方法生成 4x4 的全1矩阵、对角线为5的矩阵
- 形状操作:将一维数组 [1,2,3,4,5,6] 转换为 2x3 矩阵,再展平
- 数学计算:计算上述矩阵的行均值、列总和
- 类型转换:创建一个布尔数组,转换为浮点型
- 综合应用:生成两个随机数组,练习 hstack/vstack
我的练习结果:
#题目1
arr1 = np.ones((4, 4))#不要忘记元组符号
arr2 = np.eye(4, 4)*4
arr3 =arr1 + arr2
#或者用`np.diag(np.full(4,5))`
#题目2
arr4 = np.array([1,2,3,4,5,6])
arr4 = arr4.reshape((2, 3))#不要忘记元组符号
arr4 = arr4.flatten()#要正确调用方法
#题目3
# 计算行均值(每行的均值)
row_means = arr3.mean(axis=1) # ✅ axis=1 表示按行计算
# 计算列总和(每列的总和)
col_sums = arr3.sum(axis=0) # ✅ axis=0 表示按列计算
#题目4
arr5 = np.array([True, False, True])
arr5 = arr5.astype(float)
#题目5
五、学习资源推荐
- 官方文档速查:NumPy 快速入门
- 错误排查技巧:遇到报错时,先检查:
- 数组形状是否匹配
- 数据类型是否正确
- 函数参数是否用元组(如
shape=(2,3)
)
- 练习平台:LeetCode 或 HackerRank 的 NumPy 题目(选择简单难度)
以下是你的练习批改和详细讲解:
强化以下知识
-
函数参数传递规则
- NumPy 中所有形状参数(如
shape
,reshape()
)必须用元组传递 - 例如:
np.ones((4,4))
而不是np.ones(4,4)
- NumPy 中所有形状参数(如
-
对象方法与全局函数
flatten()
是数组对象的方法,调用方式为arr.flatten()
np.mean(arr)
是全局函数,等价于arr.mean()
-
轴方向 (axis) 的定义
axis=0
→ 沿列操作(如计算列总和)axis=1
→ 沿行操作(如计算行均值)
-
随机数组生成
np.random.rand(2,3)
生成指定形状的0~1随机矩阵np.random.randint()
生成整数随机矩阵
建议练习:
# 强化练习:生成一个3x3随机整数矩阵(范围10~20),计算其转置矩阵
arr = np.random.randint(10, 20, size=(3,3))
arr_transpose = arr.T