NumPy 教程

NumPy 教程

NumPy(Numerical Python)是 Python 科学计算的基础库,提供了高性能的多维数组对象和丰富的数学运算函数。

本教程包含

  • 基础篇:数组创建、属性、索引、切片
  • 运算篇:算术运算、矩阵运算、广播机制
  • 进阶篇:统计函数、线性代数、随机数

为什么学习 NumPy

NumPy 是 Pandas、Matplotlib、Scikit-learn、TensorFlow 等所有 Python 数据科学库的基础。掌握 NumPy 是进入数据分析、机器学习和人工智能领域的必经之路。

学习准备

pip install numpy

NumPy 简介

NumPy 简介

NumPy 是一个开源的 Python 科学计算库,于 2006 年发布,是 Python 数据科学生态的核心。

核心特性

  • ndarray 数组:高性能的同质多维数组
  • 广播机制:不同形状数组间自动运算
  • 通用函数(ufunc):元素级快速运算
  • 线性代数模块:linalg 子模块
  • 随机数模块:random 子模块
  • 与 C/Fortran 集成:底层用编译代码,性能接近原生

与 Python 列表对比

特性Python 列表NumPy 数组
存储类型可混合类型单一类型(同质)
运算速度慢(逐元素循环)快(向量化)
内存占用大(对象开销)小(紧凑连续)
多维支持嵌套列表原生多维

NumPy 环境搭建

NumPy 环境搭建

安装 NumPy 非常简单,推荐使用 pip 或 conda 安装。

使用 pip 安装

pip install numpy

使用 conda 安装

conda install numpy

验证安装

import numpy as np
print(np.__version__)   # 例如 1.26.4

推荐环境

  • Anaconda:数据科学全家桶,自带 NumPy
  • Jupyter Notebook / JupyterLab:交互式体验最佳
  • VS Code + Python 扩展:轻量开发环境

常用导入约定

import numpy as np   # 官方推荐别名 np

NumPy 数组创建

NumPy 数组创建

创建数组是 NumPy 的基本操作,有十几种方式,这里介绍最常用的。

从列表创建

import numpy as np

a = np.array([1, 2, 3])          # 一维数组
b = np.array([[1, 2], [3, 4]])   # 二维数组
c = np.array([1, 2, 3], dtype=float)  # 指定类型

特殊数组

np.zeros((2, 3))    # 全零数组
np.ones((2, 3))     # 全一数组
np.full((2, 2), 7)  # 填充数组
np.eye(3)           # 单位矩阵
np.empty((2, 2))    # 未初始化(随机值)

范围数组

np.arange(10)        # [0 1 2 ... 9]
np.arange(1, 10, 2)  # [1 3 5 7 9]
np.linspace(0, 1, 5) # 5 个等分点 [0 0.25 0.5 0.75 1]

NumPy 数组属性

NumPy 数组属性

NumPy 数组(ndarray)有一组描述自身结构的属性。

核心属性

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6]])

a.shape       # 形状: (2, 3)
a.ndim        # 维度数: 2
a.size        # 元素总数: 6
a.dtype       # 数据类型: int64
a.itemsize    # 每个元素字节数: 8
a.nbytes      # 总字节数: 48
a.T           # 转置视图

修改形状

a.reshape(3, 2)   # 重排为 3x2
a.flatten()       # 展平为一维(复制)
a.ravel()         # 展平为一维(视图)
a.resize(3, 2)    # 原地修改形状

注意

  • reshape 返回新视图,原数组不变
  • flatten 返回副本,ravel 返回视图(修改会影响原数组)
  • size = shape 各维度乘积

NumPy 数组索引

NumPy 数组索引

NumPy 支持与 Python 列表类似的下标索引,并扩展到多维和布尔索引。

基本索引

import numpy as np

a = np.array([10, 20, 30, 40])
a[0]       # 10
a[-1]      # 40
a[1:3]     # [20 30]

b = np.array([[1, 2, 3], [4, 5, 6]])
b[1, 2]    # 6 (第1行第2列)
b[0]       # [1 2 3] (第0行)

负索引与切片

a[::-1]        # 反转
b[:, 1:]       # 所有行,第1列起
b[1, :]        # 第1行全部
b[:, 0]        # 第0列全部

注意

NumPy 切片返回的是视图(与原数组共享数据),修改视图会影响原数组。若需独立副本,使用 .copy()。

NumPy 数组切片

NumPy 数组切片

切片用于提取数组的子集,语法为 [start:stop:step]。

一维切片

import numpy as np

a = np.arange(10)      # [0 1 2 3 4 5 6 7 8 9]
a[2:5]     # [2 3 4]
a[:4]      # [0 1 2 3]
a[5:]      # [5 6 7 8 9]
a[::2]     # 偶数位 [0 2 4 6 8]
a[1::2]    # 奇数位 [1 3 5 7 9]
a[::-1]    # 反转

二维切片

b = np.arange(12).reshape(3, 4)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]
b[:2, 1:3]    # 前两行、第1-2列
b[1:, :]      # 从第1行开始的所有列
b[:, ::2]     # 所有行、偶数列

重要特性:视图

sub = b[:2, :2]
sub[0, 0] = 99   # 会修改原数组 b!
print(b[0, 0])   # 99

切片是视图而非副本,修改会传导到原数组。想独立修改用 b[:2, :2].copy()。

NumPy 高级索引

NumPy 高级索引

高级索引允许用整数数组或布尔数组进行灵活的复杂选取。

整数数组索引

import numpy as np

a = np.array([10, 20, 30, 40, 50])
idx = np.array([0, 2, 4])
a[idx]       # [10 30 50]
a[[1, 3]]    # [20 40]

b = np.arange(12).reshape(3, 4)
b[[0, 2], [1, 3]]   # (0,1)和(2,3)元素: [1, 11]

布尔索引

a = np.array([1, 2, 3, 4, 5])
mask = a > 3        # [False False False  True  True]
a[mask]             # [4 5]
a[a % 2 == 0]       # 偶数 [2 4]

# 条件赋值
a[a < 3] = 0        # 小于3的置0

注意

高级索引返回的是副本(与基本切片不同),修改不会影响原数组。

NumPy 数组运算

NumPy 数组运算

NumPy 的核心优势是向量化运算:对整个数组执行操作,无需循环。

算术运算

import numpy as np

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

a + b    # [5 7 9]
a - b    # [-3 -3 -3]
a * b    # [4 10 18] (对应元素相乘)
a / b    # [0.25 0.4 0.5]
a ** 2   # [1 4 9]
np.sqrt(a)   # 开方

标量运算(广播)

a + 10    # [11 12 13]
a * 2     # [2 4 6]

比较运算

a > 2        # [False False  True]
np.all(a > 0)  # True
np.any(a > 2)  # True

注意

乘法 * 是元素级相乘,不是矩阵乘法。矩阵乘法用 @ 或 np.dot()。

NumPy 矩阵运算

NumPy 矩阵运算

NumPy 提供完整的线性代数运算,支持矩阵乘法、转置、求逆等。

矩阵乘法

import numpy as np

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

A @ B          # 矩阵乘法 (Python 3.5+)
np.dot(A, B)   # 等价写法
np.matmul(A, B) # 等价写法

其他线性代数操作

np.transpose(A)   # 转置 (A.T)
np.linalg.inv(A)  # 求逆
np.linalg.det(A)  # 行列式
np.linalg.eig(A)  # 特征值与特征向量
np.linalg.solve(A, b)  # 解线性方程组

内积与外积

v = np.array([1, 2, 3])
w = np.array([4, 5, 6])
np.inner(v, w)    # 内积: 32
np.outer(v, w)    # 外积: 3x3 矩阵

NumPy 广播机制

NumPy 广播机制

广播(Broadcasting)让不同形状的数组能够进行算术运算,是 NumPy 强大且高效的特性。

广播规则

  1. 从后往前比较各维度
  2. 维度相同或其中一个为 1 时兼容
  3. 维度为 1 的会扩展匹配

常见场景

import numpy as np

# 数组 + 标量
a = np.array([1, 2, 3])
a + 10    # [11 12 13]

# 二维 + 一维(行广播)
m = np.arange(6).reshape(2, 3)
v = np.array([10, 20, 30])
m + v     # 每行都加 v

# 二维 + 列向量(列广播)
c = np.array([[1], [2]])
m + c     # 每列都加 c

广播示例图

形状 (2, 3) 与 (3,)
      (2, 3)     (2, 3)
      (3,)  ->   (1, 3) -> 扩展为 (2, 3)

无法广播的情况

a = np.ones((3, 2))
b = np.ones((2, 3))
a + b   # ValueError: 形状不兼容

NumPy 数组操作

NumPy 数组操作

数组操作包括拼接、拆分、排序、去重等日常高频功能。

拼接

import numpy as np

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

np.concatenate([a, b])          # [1 2 3 4 5 6]
np.hstack([a, b])               # 水平拼接
np.vstack([a, b])               # 垂直拼接 [[1 2 3],[4 5 6]]

m1 = np.array([[1, 2], [3, 4]])
m2 = np.array([[5, 6]])
np.append(m1, m2, axis=0)       # 添加行

拆分

arr = np.arange(9)
np.split(arr, 3)      # 3 等分
np.array_split(arr, 4)  # 不均匀拆分
np.hsplit(m1, 2)      # 水平拆分

排序与去重

arr = np.array([3, 1, 2, 3, 1])
np.sort(arr)          # [1 1 2 3 3] (返回副本)
arr.sort()            # 原地排序
np.unique(arr)        # 去重 [1 2 3]
np.unique(arr, return_counts=True)  # 带计数

NumPy 数组复制与视图

NumPy 数组复制与视图

理解视图(View)与副本(Copy)的区别是避免 NumPy 陷阱的关键。

视图(View)

import numpy as np

a = np.arange(6)
v = a[2:5]      # 切片 -> 视图
v[0] = 99
print(a)        # [0 1 99 3 4 5] 原数组被修改!

副本(Copy)

c = a[2:5].copy()   # 显式复制
c[0] = 0
print(a)            # 原数组不受影响

判断是否共享内存

np.shares_memory(a, v)   # True (视图)
np.shares_memory(a, c)   # False (副本)

产生副本的常见操作

  • .copy():显式复制
  • np.array(list):从列表新建
  • a.astype(dtype):类型转换
  • a.flatten():展平(副本)
  • 高级索引、布尔索引(副本)

经验法则

基本切片 → 视图;高级索引/类型转换/显式 copy → 副本。不确定时用 np.shares_memory 验证。

NumPy 数组类型转换

NumPy 数组类型转换

NumPy 数组有严格的数据类型(dtype),类型转换用 astype() 方法。

常见 dtype

import numpy as np

np.int8 / np.int16 / np.int32 / np.int64   # 整数
np.float16 / np.float32 / np.float64       # 浮点
np.bool_                                   # 布尔
np.complex64 / np.complex128               # 复数
np.str_ / np.unicode_                      # 字符串

转换示例

a = np.array([1.5, 2.7, 3.2])
b = a.astype(np.int32)     # [1 2 3] (截断)
c = a.astype("float32")
d = np.array([0, 1, 0]).astype(bool)   # [False True False]

数组与列表互转

arr = np.array([1, 2, 3])
lst = arr.tolist()        # [1, 2, 3]
back = np.array(lst)

注意事项

  • float 转 int 直接截断小数部分,不做四舍五入
  • 字符串转数字失败会抛异常或变 NaN
  • astype 返回副本,原数组类型不变

NumPy 统计函数

NumPy 统计函数

NumPy 内置丰富的统计函数,用于描述数据的分布特征。

基本统计

import numpy as np

data = np.array([[1, 2, 3], [4, 5, 6]])

np.min(data)          # 最小值: 1
np.max(data)          # 最大值: 6
np.sum(data)          # 总和: 21
np.mean(data)         # 平均值: 3.5
np.median(data)       # 中位数: 3.5
np.std(data)          # 标准差
np.var(data)          # 方差
np.prod(data)         # 乘积

指定轴统计

np.sum(data, axis=0)   # 按列求和: [5 7 9]
np.sum(data, axis=1)   # 按行求和: [6 15]
np.mean(data, axis=0)  # 每列均值

累计与百分位

arr = np.array([1, 2, 3, 4, 5])
np.cumsum(arr)      # 累计和: [1 3 6 10 15]
np.cumprod(arr)     # 累计积
np.percentile(arr, 50)   # 50% 分位(中位数)
np.percentile(arr, [25, 75])  # 四分位

NumPy 随机数

NumPy 随机数

np.random 模块用于生成各种分布的随机数,是模拟和机器学习的基础。

均匀分布随机数

import numpy as np

np.random.seed(42)       # 固定随机种子,结果可复现
np.random.rand(3, 2)     # [0,1) 均匀分布 3x2
np.random.rand(5)        # 一维 5 个
np.random.randint(1, 100, 10)   # [1,100) 的 10 个整数
np.random.uniform(0, 1, 5)      # 均匀分布

正态分布

np.random.randn(5)              # 标准正态 N(0,1)
np.random.normal(0, 1, 1000)    # 均值为0,标准差为1

其他分布与操作

np.random.binomial(10, 0.5, 100)   # 二项分布
np.random.poisson(3, 100)          # 泊松分布
np.random.shuffle(arr)             # 原地打乱
np.random.choice([1, 2, 3], size=5, p=[0.1, 0.3, 0.6])  # 加权抽样

重要

训练模型或做实验时务必用 np.random.seed(n) 固定种子,保证结果可复现。

NumPy 线性代数

NumPy 线性代数

np.linalg 子模块提供了完整的线性代数函数,是科学计算的重要部分。

常用函数

import numpy as np

A = np.array([[3, 1], [1, 2]])

np.linalg.det(A)        # 行列式: 5.0
np.linalg.inv(A)        # 逆矩阵
np.linalg.matrix_rank(A)  # 矩阵的秩
np.linalg.norm(A)       # 范数(默认Frobenius)
np.linalg.eig(A)        # 特征值/特征向量
np.linalg.eigvals(A)    # 仅特征值

解线性方程组

# 3x + y = 9
# x + 2y = 8
A = np.array([[3, 1], [1, 2]])
b = np.array([9, 8])
x = np.linalg.solve(A, b)
print(x)   # [2. 3.]  -> x=2, y=3

矩阵分解

U, S, Vt = np.linalg.svd(A)       # 奇异值分解
Q, R = np.linalg.qr(A)            # QR 分解
L = np.linalg.cholesky(A)         # Cholesky 分解(需正定)

SVD 在推荐系统、数据降维(PCA)中广泛使用。

NumPy 数组形状操作

NumPy 数组形状操作

重塑数组形状是数据预处理中的常见需求。

reshape

import numpy as np

a = np.arange(12)
b = a.reshape(3, 4)       # 3行4列
c = a.reshape(2, 2, 3)    # 三维
d = a.reshape(-1, 4)      # -1 自动推断: 3x4
e = a.reshape(4, -1)      # 4x3

展平与转置

m = np.arange(6).reshape(2, 3)
m.flatten()      # [0 1 2 3 4 5] 副本
m.ravel()        # 视图
m.T              # 转置 3x2
np.transpose(m)  # 等价

增加/删除维度

v = np.array([1, 2, 3])
v[np.newaxis, :]      # (1, 3)
v[:, np.newaxis]      # (3, 1)
np.expand_dims(v, 0)  # (1, 3)
np.squeeze(m, 0)      # 删除长度1的维度

维度交换与翻转

np.swapaxes(arr, 0, 1)   # 交换两轴
np.flip(arr)             # 全部翻转
np.flip(arr, axis=1)     # 沿指定轴翻转

NumPy 排序与搜索

NumPy 排序与搜索

NumPy 提供高效的排序和搜索函数,性能远超 Python 内置实现。

排序

import numpy as np

arr = np.array([3, 1, 2, 5, 4])
np.sort(arr)          # [1 2 3 4 5] (返回副本)
arr.sort()            # 原地排序
np.argsort(arr)       # 排序索引 [1 2 0 4 3]

# 二维按列/行排序
m = np.array([[3, 1], [2, 4]])
np.sort(m, axis=0)    # 每列排序 [[2 1],[3 4]]
np.sort(m, axis=1)    # 每行排序 [[1 3],[2 4]]

搜索

arr = np.array([1, 3, 5, 7, 9])
np.where(arr > 4)         # 满足条件的索引 (array([2,3,4]),)
np.where(arr > 4, arr, 0) # 条件替换
np.searchsorted(arr, 6)   # 二分查找插入位置: 3
np.argmax(arr)            # 最大值的索引: 4
np.argmin(arr)            # 最小值的索引: 0

条件筛选

arr[arr > 4]       # [5 7 9]
np.extract(arr > 4, arr)   # 等价

NumPy 字符串函数

NumPy 字符串函数

numpy.char 模块提供了向量化的字符串处理函数,可对字符串数组批量操作。

创建字符串数组

import numpy as np

names = np.array(["apple", "banana", "cherry"])
np.char.upper(names)       # ['APPLE' 'BANANA' 'CHERRY']
np.char.lower(names)
np.char.capitalize(names)  # 首字母大写

拼接与分割

np.char.add(["a", "b"], ["1", "2"])   # ['a1' 'b2']
np.char.join("-", ["ab", "cd"])       # ['a-b' 'c-d']
np.char.split("a-b-c", "-")           # [['a' 'b' 'c']]
np.char.replace("hello world", "o", "0")  # 'hell0 w0rld'

判断与查找

np.char.startswith(names, "a")   # [True False False]
np.char.endswith(names, "y")     # [False True False]
np.char.find("banana", "na")     # 2
np.char.count("banana", "na")    # 2
np.char.isalpha(names)           # 是否全为字母

去空格

np.char.strip("  hello  ")       # 'hello'
np.char.lstrip("  hello")
np.char.rstrip("hello  ")

注意:对纯文本处理,Pandas 的 str 方法更常用,NumPy 的 char 适合数组场景。

NumPy 文件读写

NumPy 文件读写

NumPy 支持多种文件格式的读写,包括二进制格式和文本格式。

二进制格式(.npy/.npz)

import numpy as np

arr = np.arange(10)

# 保存单个数组
np.save("arr.npy", arr)
loaded = np.load("arr.npy")

# 保存多个数组
np.savez("data.npz", a=arr, b=arr * 2)
d = np.load("data.npz")
d["a"]   # 按名取回

# 压缩保存
np.savez_compressed("data_c.npz", a=arr, b=arr * 2)

文本格式

np.savetxt("data.txt", arr, delimiter=",")      # 逗号分隔
np.savetxt("data.txt", arr, fmt="%.2f")          # 格式控制
loaded = np.loadtxt("data.txt", delimiter=",")
data = np.genfromtxt("data.csv", delimiter=",", skip_header=1)  # 跳过表头

适用场景

  • 中间数据缓存:用 .npy(快、无损)
  • 数据交换:用 CSV(通用、可读)
  • 大规模科学数据:推荐 HDF5(需 h5py 库)

NumPy 通用函数

NumPy 通用函数

通用函数(ufunc)是对数组逐元素运算的函数,速度快且支持广播。

数学函数

import numpy as np

a = np.array([0, np.pi / 2, np.pi])
np.sin(a)        # 正弦
np.cos(a)        # 余弦
np.tan(a)        # 正切
np.exp(a)        # 指数
np.log(a)        # 自然对数
np.log10(a)      # 常用对数
np.abs([-1, 2])  # 绝对值

舍入函数

np.round(3.14159, 2)     # 3.14
np.ceil(3.1)             # 4.0 (向上取整)
np.floor(3.9)            # 3.0 (向下取整)
np.rint(3.5)             # 4.0 (四舍五入)

幂指函数

np.power(2, 10)      # 1024
np.sqrt(16)          # 4.0
np.square(5)         # 25
np.sign([-2, 0, 3])  # [-1 0 1] 符号函数

通用函数的特性

  • 支持广播:不同形状数组直接运算
  • 支持 out 参数:写入预分配数组
  • 支持 where:条件运算
  • 可组合:ufunc 之间可链式调用

NumPy 布尔运算与逻辑

NumPy 布尔运算与逻辑

NumPy 提供向量化的逻辑运算,用于数组的条件判断和掩码操作。

逻辑函数

import numpy as np

a = np.array([True, False, True])
b = np.array([True, True, False])

np.logical_and(a, b)    # [True False False]
np.logical_or(a, b)     # [True True True]
np.logical_not(a)       # [False True False]
np.logical_xor(a, b)    # [False True True]

条件判断

arr = np.array([1, 2, 3, 4, 5])
arr > 3                      # [F F F T T]
(arr > 1) & (arr < 4)        # 与(注意用 & 而非 and)
(arr > 4) | (arr < 2)        # 或(用 | 而非 or)

全局判断

np.all(arr > 0)     # 全部大于0: True
np.any(arr > 4)     # 存在大于4: True
np.allclose(a, b)   # 两数组是否近似相等(浮点容差)

掩码应用

mask = (arr >= 2) & (arr <= 4)
arr[mask] = 0       # 将 2-4 之间的元素置 0
print(arr)          # [1 0 0 0 5]

重要

对 NumPy 数组做与/或必须用 & | ~,不能用 Python 的 and or not(会报错或产生错误结果)。

NumPy 线性代数应用

NumPy 线性代数应用

通过几个实际例子展示 NumPy 线性代数模块在现实场景中的应用。

示例:最小二乘拟合

import numpy as np

# 模拟数据 y = 2x + 1 + 噪声
x = np.linspace(0, 10, 100)
y = 2 * x + 1 + np.random.normal(0, 1, 100)

# 构造设计矩阵 [x, 1]
X = np.column_stack([x, np.ones_like(x)])
# 最小二乘解
coef, _, _, _ = np.linalg.lstsq(X, y, rcond=None)
print(coef)   # 接近 [2, 1]

示例:图像旋转

# 旋转矩阵
theta = np.radians(45)
R = np.array([[np.cos(theta), -np.sin(theta)],
              [np.sin(theta), np.cos(theta)]])
point = np.array([1, 0])
rotated = R @ point   # 旋转45度

示例:主成分分析(PCA)雏形

data = np.random.randn(50, 3)   # 50个3维样本
centered = data - data.mean(axis=0)
cov = np.cov(centered.T)         # 协方差矩阵
eigvals, eigvecs = np.linalg.eig(cov)
# 取最大特征值对应特征向量即第一主成分
pc1 = eigvecs[:, np.argmax(eigvals)]

NumPy 性能优化

NumPy 性能优化

正确使用 NumPy 可以让数值计算提速几十到几百倍,关键是向量化。

避免 Python 循环

import numpy as np
import time

n = 10_000_000
a = np.random.rand(n)

# 慢:Python 循环
t0 = time.time()
total = 0
for v in a:
    total += v
print(f"循环: {time.time() - t0:.3f}s")

# 快:向量化
t0 = time.time()
total = a.sum()
print(f"向量化: {time.time() - t0:.3f}s")

预分配内存

# 坏:循环中拼接数组
result = np.array([])
for i in range(1000):
    result = np.append(result, i)   # 每次都要复制

# 好:预分配
result = np.empty(1000)
for i in range(1000):
    result[i] = i

使用 in-place 运算

a = np.random.rand(1000)
b = np.random.rand(1000)

a = a + b     # 创建新数组
a += b        # 原地修改,省内存(仅同 dtype 时安全)

其他技巧

  • 用 np.where 替代条件循环
  • 合理使用 dtype:float32 比 float64 省一半内存
  • 大数据集用 np.memmap 内存映射

NumPy 与数据分析

NumPy 与数据分析

NumPy 是数据分析流水线的地基,几乎所有数据处理库都构建在它之上。

数据清洗基础

import numpy as np

data = np.array([1, 2, np.nan, 4, np.nan, 6])
np.isnan(data)              # 检测缺失值
data[np.isnan(data)] = 0    # 填充缺失值
clean = data[~np.isnan(data)]  # 删除缺失值

数据标准化

data = np.array([1, 2, 3, 4, 5])
mean = data.mean()
std = data.std()
normalized = (data - mean) / std   # z-score 标准化

与 Pandas 配合

import pandas as pd

df = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]})
arr = df.to_numpy()       # DataFrame -> ndarray
new_df = pd.DataFrame(arr, columns=["a", "b"])  # ndarray -> DataFrame

与 Matplotlib 配合

import matplotlib.pyplot as plt

x = np.linspace(0, 2 * np.pi, 100)
plt.plot(x, np.sin(x))
plt.show()

典型数据分析流程

  1. NumPy 加载与预处理原始数据
  2. Pandas 做结构化清洗与聚合
  3. Matplotlib/Seaborn 可视化
  4. Scikit-learn 建模(内部依赖 NumPy 数组)

NumPy 总结与资源

NumPy 总结与资源

恭喜你完成了 NumPy 教程的学习!以下是全教程的知识总结与后续学习资源。

知识体系回顾

  • 数组基础:创建(np.array/zeros/ones/arange/linspace)、属性、索引、切片、高级索引
  • 运算:算术运算、矩阵运算(@/dot)、广播机制、通用函数
  • 操作:形状重塑、拼接拆分、排序去重、复制与视图
  • 统计与随机:min/max/mean/std、随机数生成、分布模拟
  • 线性代数:det/inv/eig/svd/solve,最小二乘、PCA
  • 输入输出:npy/npz 二进制、txt/csv 文本读写
  • 性能:向量化、预分配、in-place 运算

后续学习路线

  1. Pandas:表格数据处理
  2. Matplotlib / Seaborn:数据可视化
  3. SciPy:科学计算高级功能
  4. Scikit-learn:机器学习
  5. TensorFlow / PyTorch:深度学习

官方资源

  • NumPy 官方文档:numpy.org/doc
  • NumPy 教程:官网 Tutorial 与 User Guide
  • 在线练习:Kaggle、LeetCode(NumPy 专项)

记住:多用 arr.shape、arr.dtype 检查数组,遇到问题查官方文档,实践是最好的学习方式。

第 1 / 27 节