喜欢的条友记得关注、点赞、转发、收藏,你们的支持就是我最大的动力源泉。
前期基础教程:
「Python3.11.0」手把手教你安装最新版Python运行环境
讲讲Python环境使用Pip命令快速下载各类库的方法
Python启航:30天编程速成之旅(第2天)-IDE安装
【Python教程】JupyterLab 开发环境安装
Python启航:30天编程速成之旅(第30天)- numpy
NumPy(Numerical Python)是 Python 中用于科学计算的核心库,提供了多维数组对象 ndarray 以及大量的数学函数来操作这些数组。NumPy 是许多其他科学计算库(如 pandas、scikit-learn、matplotlib 等)的基础,广泛应用于数据分析、机器学习、图像处理等领域。本教程将详细介绍 NumPy 的安装、基本用法、高级功能以及一些生动的例子,帮助你更好地理解和使用这个强大的工具。
1. 安装NumPy
NumPy 是一个第三方库,你需要通过 pip 来安装它。打开命令行并执行以下命令:
pip install numpy
如果你使用的是 Anaconda 发行版,NumPy 已经默认安装。你可以通过以下命令更新到最新版本:
conda update numpy
2. 导入NumPy
安装完成后,你可以通过以下方式导入 NumPy:
import numpy as np
3. 基本概念
ndarray:多维数组
ndarray 是 NumPy 的核心数据结构,表示多维数组。它可以是一维数组(向量)、二维数组(矩阵)或多维数组。
创建ndarray
- 从列表创建:
import numpy as np
# 一维数组
arr = np.array([1, 2, 3, 4, 5])
print(arr)
# 二维数组
matrix = np.array([[1, 2, 3], [4, 5, 6]])
print(matrix)
- 使用内置函数创建:
import numpy as np
# 创建全零数组
zeros = np.zeros((3, 4))
print(zeros)
# 创建全一数组
ones = np.ones((2, 3))
print(ones)
# 创建空数组(随机值)
empty = np.empty((2, 2))
print(empty)
# 创建等间距数组
arange = np.arange(0, 10, 2) # 从 0 到 10,步长为 2
print(arange)
# 创建线性间距数组
linspace = np.linspace(0, 1, 5) # 从 0 到 1,生成 5 个等间距的数
print(linspace)
- 创建随机数组:
import numpy as np
# 随机整数数组
random_int = np.random.randint(0, 10, size=(3, 3)) # 生成 3x3 的随机整数数组,范围在 0 到 10 之间
print(random_int)
# 随机浮点数数组
random_float = np.random.rand(3, 3) # 生成 3x3 的随机浮点数数组,范围在 0 到 1 之间
print(random_float)
查看数组属性
import numpy as np
# 一维数组
arr = np.array([1, 2, 3, 4, 5])
print(arr)
# 二维数组
matrix = np.array([[1, 2, 3], [4, 5, 6]])
print(matrix)
# 查看数组的形状
print(arr.shape) # 输出: (5,)
print(matrix.shape) # 输出: (2, 3)
# 查看数组的维度
print(arr.ndim) # 输出: 1
print(matrix.ndim) # 输出: 2
# 查看数组的元素类型
print(arr.dtype) # 输出: int64
print(matrix.dtype) # 输出: int64
# 查看数组的大小(总元素个数)
print(arr.size) # 输出: 5
print(matrix.size) # 输出: 6
4. 数组索引与切片
NumPy 提供了灵活的索引和切片操作,类似于 Python 列表,但更强大。
一维数组的索引与切片
import numpy as np
# 一维数组
arr = np.array([1, 2, 3, 4, 5])
# 索引
print(arr[0]) # 输出: 1
print(arr[-1]) # 输出: 5
# 切片
print(arr[1:4]) # 输出: [2 3 4]
print(arr[:3]) # 输出: [1 2 3]
print(arr[2:]) # 输出: [3 4 5]
print(arr[::-1]) # 输出: [5 4 3 2 1] (反转数组)
二维数组的索引与切片
import numpy as np
# 二维数组
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 索引
print(matrix[0, 1]) # 输出: 2
print(matrix[1, 2]) # 输出: 6
# 切片
print(matrix[0:2, 1:3]) # 输出: [[2 3] [5 6]]
print(matrix[:, 1]) # 输出: [2 5 8] (选择所有行的第 2 列)
print(matrix[1, :]) # 输出: [4 5 6] (选择第 2 行的所有列)
布尔索引
你可以使用布尔数组来筛选数据。
import numpy as np
# 一维数组
arr = np.array([1, 2, 3, 4, 5])
# 布尔索引
mask = arr > 3
print(mask) # 输出: [False False False True True]
print(arr[mask]) # 输出: [4 5]
# 二维数组
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 布尔索引
mask = matrix > 5
print(matrix[mask]) # 输出: [6 7 8 9]
花式索引
你可以使用整数数组来索引数组中的特定元素。
import numpy as np
# 一维数组
arr = np.array([10, 20, 30, 40, 50])
# 花式索引
indices = [1, 3, 4]
print(arr[indices]) # 输出: [20 40 50]
# 二维数组
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 花式索引
row_indices = [0, 2]
col_indices = [1, 2]
print(matrix[row_indices, col_indices]) # 输出: [2 9]
5. 数组运算
NumPy 提供了丰富的数学运算功能,支持逐元素运算、广播机制以及矩阵运算。
逐元素运算
import numpy as np
# 一维数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 加法
print(a + b) # 输出: [5 7 9]
# 减法
print(a - b) # 输出: [-3 -3 -3]
# 乘法
print(a * b) # 输出: [4 10 18]
# 除法
print(a / b) # 输出: [0.25 0.4 0.5 ]
# 幂运算
print(a ** 2) # 输出: [1 4 9]
广播机制
NumPy 支持广播机制,允许不同形状的数组进行运算。广播规则如下:
- 如果两个数组的维度不相同,较小的数组会在缺失的维度上扩展。
- 如果两个数组在某一维度上的大小不相同,但其中一个数组在该维度上的大小为 1,则该数组会沿着该维度扩展。
import numpy as np
# 一维数组与标量
a = np.array([1, 2, 3])
scalar = 2
print(a + scalar) # 输出: [3 4 5]
# 二维数组与一维数组
matrix = np.array([[1, 2, 3], [4, 5, 6]])
vector = np.array([1, 2, 3])
print(matrix + vector) # 输出: [[2 4 6] [5 7 9]]
矩阵运算
NumPy 提供了多种矩阵运算函数,如矩阵乘法、转置、求逆等。
import numpy as np
# 矩阵乘法
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
# 使用 @ 运算符或 dot 函数进行矩阵乘法
C = A @ B
print(C) # 输出: [[19 22] [43 50]]
# 或者
C = np.dot(A, B)
print(C) # 输出: [[19 22] [43 50]]
# 转置
A_T = A.T
print(A_T) # 输出: [[1 3] [2 4]]
# 求逆
A_inv = np.linalg.inv(A)
print(A_inv) # 输出: [[-2. 1. ]
# [ 1.5 -0.5]]
统计运算
NumPy 提供了许多统计运算函数,如求和、平均值、最大值、最小值等。
import numpy as np
# 一维数组
arr = np.array([1, 2, 3, 4, 5])
# 求和
print(np.sum(arr)) # 输出: 15
# 平均值
print(np.mean(arr)) # 输出: 3.0
# 最大值
print(np.max(arr)) # 输出: 5
# 最小值
print(np.min(arr)) # 输出: 1
# 标准差
print(np.std(arr)) # 输出: 1.4142135623730951
# 方差
print(np.var(arr)) # 输出: 2.0
6. 生动的例子
示例 :生成正弦波并绘制图表
结合 matplotlib,你可以使用 NumPy 生成正弦波并绘制图表。
import numpy as np
import matplotlib.pyplot as plt
# 生成 x 轴数据
x = np.linspace(0, 2 * np.pi, 100)
# 生成 y 轴数据(正弦波)
y = np.sin(x)
# 绘制图表
plt.plot(x, y, label='sin(x)')
plt.title('正弦波')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.legend()
plt.show()
《Python启航:30天编程速成之旅》教程今日结束了,以后会给大家带来Python的各类技巧、常用库的讲解,谢谢大家关注。
喜欢的条友记得关注、点赞、转发、收藏,你们的支持就是我最大的动力源泉。