开始学习NumPy:Python数据分析的核心库
NumPy(Numerical Python)是Python中用于科学计算的基础库,它提供了高效的多维数组对象(称为ndarray)和丰富的数学函数。NumPy是数据分析、机器学习和科学计算的核心,因为它支持向量化操作,比纯Python代码快得多。下面,我将逐步引导你入门,从安装到基本操作,确保内容清晰易懂。所有数学表达式都按规范格式呈现。
1. 什么是NumPy?为什么重要?
NumPy的核心是ndarray(N-dimensional array),这是一个多维数组结构,支持高效的元素级运算。它的优势包括:
- 高效性:基于C语言实现,运算速度快。
- 广播机制:允许对不同形状的数组进行数学运算,例如,标量与数组相加:$s + \mathbf{A}$,其中$s$是标量,$\mathbf{A}$是矩阵。
- 数学函数:提供丰富的函数,如求和、平均值、点积等。
NumPy是其他库(如Pandas和Matplotlib)的基础,因此掌握它是数据分析的第一步。
2. 安装NumPy
如果你还没有安装NumPy,可以使用pip命令安装。打开终端或命令提示符,输入:
pip install numpy
安装完成后,在Python脚本中导入库:
import numpy as np # 通常使用np作为别名
3. 创建NumPy数组
数组是NumPy的核心对象。以下是创建数组的基本方法:
- 一维数组:类似Python列表。
- 二维数组:表示矩阵,例如 $\begin{bmatrix} 1 & 2 \ 3 & 4 \end{bmatrix}$。
- 特殊数组:如全零或单位矩阵。
代码示例:
import numpy as np
# 创建一维数组
arr1 = np.array([1, 2, 3, 4]) # 输出:[1 2 3 4]
# 创建二维数组(矩阵)
arr2 = np.array([[1, 2], [3, 4]]) # 输出:[[1 2] [3 4]]
# 创建全零数组
zeros = np.zeros((2, 3)) # 创建一个2行3列的零矩阵:[[0. 0. 0.] [0. 0. 0.]]
# 创建单位矩阵
identity = np.eye(3) # 3x3单位矩阵:[[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]]
解释:
np.array()函数将Python列表转换为ndarray。- 数组的维度通过shape属性查看:
arr2.shape返回(2, 2)。 - 数据类型通过dtype属性查看:
arr1.dtype通常是int64。
4. 数组索引和切片
索引和切片操作类似Python列表,但支持多维访问。规则:
- 一维索引:
arr[index]。 - 二维索引:
arr[row, col]。 - 切片:
start:stop:step,用于提取子数组。
数学上,切片可以表示为子集:例如,从数组 $\mathbf{A}$ 中提取第1行到第2行。
代码示例:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 3x3矩阵
# 索引单个元素
element = arr[0, 1] # 第0行第1列,输出:2
# 切片行
row_slice = arr[1, :] # 第1行所有列,输出:[4 5 6]
# 切片列
col_slice = arr[:, 0:2] # 所有行,第0列到第1列(不包括第2列),输出:[[1 2] [4 5] [7 8]]
# 使用步长
step_slice = arr[::2, ::2] # 每隔一行和一列提取,输出:[[1 3] [7 9]]
注意:切片是视图(不复制数据),修改切片会影响原数组。
5. 基本数学运算
NumPy支持元素级运算和广播,使数学操作高效。常用运算包括:
- 元素级运算:加减乘除,如 $\mathbf{A} + \mathbf{B}$。
- 广播:小数组自动扩展以匹配大数组形状,例如标量加数组:$c + \mathbf{A}$。
- 点积:使用
np.dot()或@运算符,数学公式为 $\mathbf{a} \cdot \mathbf{b} = \sum_{i} a_i b_i$。 - 统计函数:如
np.sum(),np.mean()。
代码示例:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 元素级加法
add_result = a + b # 输出:[5 7 9]
# 元素级乘法
mul_result = a * b # 输出:[4 10 18]
# 点积(内积)
dot_product = np.dot(a, b) # 或 a @ b,计算:1*4 + 2*5 + 3*6 = 32
# 广播示例:标量加数组
scalar = 10
broadcast_result = scalar + a # 输出:[11 12 13]
# 统计函数:求和和平均值
sum_val = np.sum(a) # 输出:6
mean_val = np.mean(a) # 输出:2.0
解释:
- 点积是线性代数的基础,用于计算向量相似性。
- 广播机制允许灵活运算,无需显式循环。
6. 进阶概念:形状操作和通用函数
一旦掌握基础,可以学习:
- 改变形状:
reshape()方法,例如将一维数组转为二维。 - 通用函数(ufunc):如
np.sin(),np.exp(),支持向量化数学函数。 - 聚合操作:沿轴计算,如
np.sum(axis=0)对列求和。
公式示例:指数函数作用于数组 $\mathbf{x}$ 得到 $\exp(\mathbf{x})$。
代码示例:
import numpy as np
arr = np.array([1, 2, 3, 4])
# 改变形状:转为2x2矩阵
reshaped = arr.reshape((2, 2)) # 输出:[[1 2] [3 4]]
# 通用函数:计算正弦
sin_result = np.sin(arr) # 输出:[0.8415 0.9093 0.1411 -0.7568](近似值)
# 聚合操作:沿轴求和
matrix = np.array([[1, 2], [3, 4]])
sum_rows = np.sum(matrix, axis=0) # 对列求和(axis=0),输出:[4 6]
sum_cols = np.sum(matrix, axis=1) # 对行求和(axis=1),输出:[3 7]
7. 总结和下一步
通过以上步骤,你已经学会了NumPy的基本操作:
- 创建和索引数组。
- 执行数学运算和广播。
- 使用常用函数。
练习建议:
- 尝试创建自己的数组,并计算点积或平均值。
- 探索更多函数,如
np.random生成随机数组。 - 下一步,学习Pandas(用于数据处理)和Matplotlib(用于可视化),它们都依赖NumPy。
NumPy是数据分析的基石,坚持练习能快速提升技能。如果有具体问题,随时继续提问!

2293

被折叠的 条评论
为什么被折叠?



