程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

Python启航:30天编程速成之旅(第30天)- numpy

hfteth 2025-02-17 12:21:17 技术文章 15 ℃

喜欢的条友记得关注、点赞、转发、收藏,你们的支持就是我最大的动力源泉。

前期基础教程:

「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的各类技巧、常用库的讲解,谢谢大家关注。

喜欢的条友记得关注、点赞、转发、收藏,你们的支持就是我最大的动力源泉。

Tags:

最近发表
标签列表