欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 【Numpy】学习巩固笔记

【Numpy】学习巩固笔记

2025/4/2 2:33:18 来源:https://blog.csdn.net/2401_82947696/article/details/146722406  浏览:    关键词:【Numpy】学习巩固笔记

批改及建议

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)

需要加强记忆的点

  1. NumPy 专用函数

    • 单位矩阵用 np.eye()np.identity()
    • 等间距数组用 np.linspace()(包含终点),np.arange() 不包含终点。
  2. 数组形状操作

    • 使用 reshape()flatten()np.newaxis 调整维度。
    • 堆叠用 np.hstack()/np.vstack()np.tile() 重复数组。
    • np.hastack()是横向堆叠,就是说,列数没有改变
    • np.vstack() 是竖向堆叠,也就是行数没有改变
  3. 数据类型转换

    • .astype() 转换数据类型,避免直接强制类型转换(如 float(arr))。
  4. 随机数组生成

    • np.random.rand() 生成 [0,1) 的均匀分布数组。
  5. 数值计算函数

    • 使用 np.sum()np.mean()np.std() 代替列表原生方法。
  6. 布尔数组处理

    • .astype(int) 将布尔值转为 1/0。
  7. 三维数组创建

    • 注意参数需为元组(如 np.ones((2,3,4)))。
  8. 反转数组

    • 用切片 [::-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列)
    

四、练习题建议

根据你的错误,推荐以下练习顺序:

  1. 基础创建:用不同方法生成 4x4 的全1矩阵、对角线为5的矩阵
  2. 形状操作:将一维数组 [1,2,3,4,5,6] 转换为 2x3 矩阵,再展平
  3. 数学计算:计算上述矩阵的行均值、列总和
  4. 类型转换:创建一个布尔数组,转换为浮点型
  5. 综合应用:生成两个随机数组,练习 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

五、学习资源推荐

  1. 官方文档速查:NumPy 快速入门
  2. 错误排查技巧:遇到报错时,先检查:
    • 数组形状是否匹配
    • 数据类型是否正确
    • 函数参数是否用元组(如 shape=(2,3)
  3. 练习平台:LeetCode 或 HackerRank 的 NumPy 题目(选择简单难度)
    以下是你的练习批改和详细讲解:

强化以下知识

  1. 函数参数传递规则

    • NumPy 中所有形状参数(如 shape, reshape())必须用元组传递
    • 例如:np.ones((4,4)) 而不是 np.ones(4,4)
  2. 对象方法与全局函数

    • flatten() 是数组对象的方法,调用方式为 arr.flatten()
    • np.mean(arr) 是全局函数,等价于 arr.mean()
  3. 轴方向 (axis) 的定义

    • axis=0 → 沿列操作(如计算列总和)
    • axis=1 → 沿行操作(如计算行均值)
  4. 随机数组生成

    • 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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词