第一阶段-第8天-NumPy入门

📅 2026/7/24 0:18:11 👁️ 阅读次数 📝 编程学习
第一阶段-第8天-NumPy入门

今日目标

  1. 安装并熟悉NumPy
  2. 理解数组与列表的区别
  3. 掌握基本的NumPy运算
  4. 理解向量化的好处

学习内容

1. 安装NumPy

pip3installnumpy

验证安装:

importnumpyasnpprint(np.__version__)

2. 创建数组

importnumpyasnp# 从列表创建a=np.array([1,2,3,4,5])print(a)# [1 2 3 4 5]print(type(a))# <class 'numpy.ndarray'># 创建特定形状的数组b=np.zeros(5)# [0. 0. 0. 0. 0.]c=np.ones(5)# [1. 1. 1. 1. 1.]d=np.arange(5)# [0 1 2 3 4]e=np.linspace(0,10,5)# [ 0. 2.5 5. 7.5 10.]print("zeros:",b)print("ones:",c)print("arange:",d)print("linspace:",e)

3. 数组的基本运算

importnumpyasnp a=np.array([1,2,3,4,5])b=np.array([10,20,30,40,50])# 逐元素运算print("加法:",a+b)# [11 22 33 44 55]print("减法:",a-b)# [-9 -18 -27 -36 -45]print("乘法:",a*b)# [ 10 40 90 160 250]print("除法:",b/a)# [10. 10. 10. 10. 10.]# 标量运算print("乘以2:",a*2)# [ 2 4 6 8 10]print("平方:",a**2)# [ 1 4 9 16 25]# 内置函数print("求和:",np.sum(a))# 15print("平均值:",np.mean(a))# 3.0print("最大值:",np.max(a))# 5print("最小值:",np.min(a))# 1

4. 多维数组

importnumpyasnp# 二维数组(矩阵)矩阵=np.array([[1,2,3],[4,5,6],[7,8,9]])print("矩阵:\n",矩阵)print("形状:",矩阵.shape)# (3, 3)print("行数:",矩阵.shape[0])# 3print("列数:",矩阵.shape[1])# 3# 按列计算print("每列的和:",np.sum(矩阵,axis=0))# [12 15 18]# 按行计算print("每行的和:",np.sum(矩阵,axis=1))# [ 6 15 24]

5. 向量化 vs 循环

importnumpyasnpimporttime n=1000000# 方法1:纯Python循环a_list=list(range(n))b_list=list(range(n,2*n))start=time.time()结果=[x+yforx,yinzip(a_list,b_list)]python_time=time.time()-start# 方法2:NumPy向量化a_np=np.arange(n)b_np=np.arange(n,2*n)start=time.time()结果=a_np+b_np numpy_time=time.time()-startprint(f"Python循环:{python_time:.4f}秒")print(f"NumPy向量化:{numpy_time:.4f}秒")print(f"加速比:{python_time/numpy_time:.1f}倍")

通常NumPy比纯Python快10-100倍。

今日练习

练习1:用NumPy重新计算MSE

importnumpyasnp 真实值=np.array([1,3,5,7,9])预测值=np.array([1.5,2.8,5.2,6.9,9.5])# 一行代码计算MSEmse=np.mean((预测值-真实值)**2)print(f"MSE ={mse:.4f}")

练习2:批量计算预测值

importnumpyasnp 输入=np.array([1,2,3,4,5])w=2.0b=1.0# 向量化预测预测值=w*输入+bprint("预测值:",预测值)# 输出: [ 3. 5. 7. 9. 11.]

练习3:矩阵乘法

importnumpyasnp# 两个矩阵相乘A=np.array([[1,2],[3,4]])B=np.array([[5,6],[7,8]])C=np.dot(A,B)# 或者 A @ Bprint("A × B =\n",C)# [[19 22]# [43 50]]

验收标准

  • 能安装并使用NumPy
  • 能创建一维和二维数组
  • 能进行基本的数组运算
  • 能解释向量化相比循环的优势