Python NumPy 中文教程:从入门到进阶
NumPy(Numerical Python)是 Python 科学计算的基础包。它提供了一个强大的 N 维数组对象 ndarray,以及用于处理这些数组的各种工具。NumPy 是更高层级科学计算库(如 SciPy、Pandas 和 Matplotlib)的核心依赖,因此理解 NumPy 的工作原理对于任何 aspiring data scientist 或 Python 开发者至关重要。
本教程将深入探讨 NumPy 的核心概念和功能,并通过丰富的示例演示其用法,旨在帮助你从入门到进阶掌握 NumPy。
一、NumPy ndarray:N 维数组对象
NumPy 的核心是 ndarray 对象,它是一个同构多维数组,也就是说,它包含相同类型的数据,并且这些数据按照固定的维度排列。ndarray 对象比 Python 内置的列表更高效,因为它存储在连续的内存块中,并且可以利用向量化操作进行快速计算。
-
创建 ndarray:
-
np.array()
:从 Python 列表或元组创建 ndarray。“`python
import numpy as npa = np.array([1, 2, 3]) # 一维数组
b = np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组
“` -
np.zeros()
:创建全零数组。python
zeros_array = np.zeros((2, 3)) # 2x3 的零数组 -
np.ones()
:创建全一数组。python
ones_array = np.ones((2, 3)) # 2x3 的一数组 -
np.empty()
:创建未初始化的数组(内容是内存中的随机值)。python
empty_array = np.empty((2, 3)) -
np.arange()
:类似 Python 的range()
,创建等差数列。python
arange_array = np.arange(10) # 0 到 9 -
np.linspace()
:创建指定范围内等间距的数字序列。python
linspace_array = np.linspace(0, 1, 5) # 0 到 1 之间 5 个等间距的数 -
ndarray 属性:
-
ndim
:数组的维度。 shape
:数组的形状,以元组形式表示每个维度的大小。size
:数组的元素总数。-
dtype
:数组元素的数据类型。python
print(b.ndim) # 输出:2
print(b.shape) # 输出:(2, 3)
print(b.size) # 输出:6
print(b.dtype) # 输出:dtype('int64') -
数据类型:
NumPy 支持各种数据类型,包括整数、浮点数、布尔值、复数等。可以使用 dtype
参数指定数据类型。
```python
c = np.array([1, 2, 3], dtype=np.float64)
```
二、数组操作
- 索引和切片:
与 Python 列表类似,可以使用索引和切片访问 ndarray 的元素。
```python
print(b[0, 1]) # 输出:2
print(b[:, 1]) # 输出:[2 5] 第二列
print(b[1, :]) # 输出:[4 5 6] 第二行
```
- 数组运算:
NumPy 支持 element-wise 运算,即对数组的每个元素进行相同的运算。
```python
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
print(x + y) # 输出:[5 7 9]
print(x * y) # 输出:[ 4 10 18]
```
- 广播机制:
当对不同形状的数组进行运算时,NumPy 会使用广播机制来扩展较小数组的维度,使其与较大数组匹配。
```python
x = np.array([1, 2, 3])
y = 2
print(x * y) # 输出:[2 4 6]
```
-
数组变形:
-
reshape()
:改变数组的形状。python
z = np.arange(6).reshape(2, 3) -
flatten()
:将多维数组转换为一维数组。python
flat_array = z.flatten() -
transpose()
:转置数组。python
transposed_array = z.transpose() -
数组连接和分割:
-
concatenate()
:连接多个数组。python
a = np.array([1, 2])
b = np.array([3, 4])
c = np.concatenate((a, b)) # 输出:[1 2 3 4] -
split()
:分割数组。python
x = np.arange(9)
x1, x2, x3 = np.split(x, 3)
三、NumPy 函数和方法
NumPy 提供了大量的函数和方法用于数组操作,包括数学函数、统计函数、线性代数函数等。
-
数学函数:
-
np.sin()
,np.cos()
,np.tan()
,np.exp()
,np.log()
等。 -
统计函数:
-
np.mean()
:计算平均值。 np.median()
:计算中位数。np.std()
:计算标准差。-
np.var()
:计算方差。 -
线性代数函数:
-
np.dot()
:计算点积。 np.linalg.inv()
:计算逆矩阵。np.linalg.det()
:计算行列式。
四、高级主题
- 随机数生成:
np.random
模块提供各种随机数生成函数。
- 线性代数:
np.linalg
模块提供线性代数运算函数。
- 傅里叶变换:
np.fft
模块提供快速傅里叶变换函数。
五、总结
本教程涵盖了 NumPy 的核心概念和常用功能。通过学习和实践这些知识,你将能够有效地使用 NumPy 进行数据处理和科学计算。 希望本教程能帮助你开启 Python 数据科学之旅。 建议进一步学习官方文档和相关书籍,深入了解 NumPy 的更多高级特性,并将其应用于实际项目中。 持续的学习和实践是掌握 NumPy 并将其应用于解决复杂问题的关键。