Files
Iris Series: Visualize Math -- From Arithmetic Basics to Machine Learning 79be5dda7d Add files via upload
2025-02-01 17:06:45 +08:00

278 lines
40 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"id": "73bd968b-d970-4a05-94ef-4e7abf990827",
"metadata": {},
"source": [
"Chapter 03\n",
"\n",
"# 向量L2范数\n",
"Book_4《矩阵力量》 | 鸢尾花书:从加减乘除到机器学习 (第二版)"
]
},
{
"cell_type": "markdown",
"id": "5de35728-d92e-4001-b0cf-042b170a09bf",
"metadata": {},
"source": [
"这段代码在二维平面上绘制了三个向量 $\\vec{u}$、$\\vec{v}$ 和 $\\vec{w}$,并用标签标注了向量模长。首先定义向量 $\\vec{u} = [4, 3]$ 和 $\\vec{v} = [-2, 4]$,并将 $\\vec{u} + \\vec{v} = [2, 7]$ 存入 $\\vec{w}$。这些向量用 `plt.quiver` 在图上绘制,以便可视化不同方向与长度的向量关系。\n",
"\n",
"模长($L_2$ 范数)公式为:\n",
"\n",
"$$\n",
"\\|\\vec{u}\\|_2 = \\sqrt{u_1^2 + u_2^2}\n",
"$$\n",
"\n",
"对于向量 $\\vec{u} = [4, 3]$ 和 $\\vec{v} = [-2, 4]$,各自的模长分别为:\n",
"\n",
"$$\n",
"\\|\\vec{u}\\|_2 = \\sqrt{4^2 + 3^2} = 5\n",
"$$\n",
"\n",
"$$\n",
"\\|\\vec{v}\\|_2 = \\sqrt{(-2)^2 + 4^2} = \\sqrt{20} \\approx 4.47\n",
"$$\n",
"\n",
"并且 $\\vec{u} + \\vec{v}$ 的模长为:\n",
"\n",
"$$\n",
"\\|\\vec{u} + \\vec{v}\\|_2 = \\sqrt{2^2 + 7^2} = \\sqrt{53} \\approx 7.28\n",
"$$\n",
"\n",
"代码最终生成带有坐标轴和网格的平面图,展示不同向量模长在同一图中的可视化效果。"
]
},
{
"cell_type": "markdown",
"id": "aba40400-b1f9-4ebd-94e7-7aa28002a559",
"metadata": {},
"source": [
"## 导入所需库"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "084c8a2b-02e8-4cc1-9243-84502efce78a",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np # 导入NumPy库用于数值计算\n",
"from matplotlib import pyplot as plt # 导入Matplotlib库用于绘图\n",
"import seaborn as sns # 导入Seaborn库用于调色"
]
},
{
"cell_type": "markdown",
"id": "7a578343-5a67-4f79-85d6-60c1fe976f09",
"metadata": {},
"source": [
"## 定义自定义函数,用于绘制向量及标注"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "4087477b-9463-4e7f-968b-3be248d53c46",
"metadata": {},
"outputs": [],
"source": [
"def plot_vectors(vectors, labels, ax_limits=(-2, 8), grid=True):\n",
" \"\"\"\n",
" 绘制二维向量及其模长标注\n",
"\n",
" 参数:\n",
" vectors (list): 每个向量的起点和终点,格式为[[x1, y1, dx, dy], ...]\n",
" labels (list): 每个向量的标注,格式为[(x_pos, y_pos, text, color_index), ...]\n",
" ax_limits (tuple): 坐标轴的范围,格式为(min, max)\n",
" grid (bool): 是否显示网格\n",
" \"\"\"\n",
" # 创建绘图画布\n",
" fig, ax = plt.subplots()\n",
"\n",
" # 分解向量起点和分量,用于绘图\n",
" x_coords = [v[0] for v in vectors] # 向量的x起点\n",
" y_coords = [v[1] for v in vectors] # 向量的y起点\n",
" dx_coords = [v[2] for v in vectors] # 向量的x分量\n",
" dy_coords = [v[3] for v in vectors] # 向量的y分量\n",
"\n",
" # 绘制向量\n",
" plt.quiver(x_coords, y_coords, dx_coords, dy_coords,\n",
" angles='xy', scale_units='xy', scale=1, \n",
" color=sns.color_palette())\n",
"\n",
" # 绘制坐标轴\n",
" plt.axvline(x=0, color='grey') # y轴\n",
" plt.axhline(y=0, color='grey') # x轴\n",
"\n",
" # 标注向量模长\n",
" for x_pos, y_pos, text, color_index in labels:\n",
" plt.text(x_pos, y_pos, text, \n",
" color=sns.color_palette()[color_index], size=12, \n",
" ha='center', va='center')\n",
"\n",
" # 设置图形细节\n",
" plt.ylabel('$x_2$') # y轴标签\n",
" plt.xlabel('$x_1$') # x轴标签\n",
" plt.axis('scaled') # 坐标轴比例相等\n",
" ax.set_xticks(np.arange(ax_limits[0], ax_limits[1] + 1)) # 设置x轴刻度\n",
" ax.set_yticks(np.arange(ax_limits[0], ax_limits[1] + 1)) # 设置y轴刻度\n",
" ax.set_xlim(ax_limits[0], ax_limits[1]) # 设置x轴范围\n",
" ax.set_ylim(ax_limits[0], ax_limits[1]) # 设置y轴范围\n",
"\n",
" if grid:\n",
" ax.grid(linestyle='--', linewidth=0.25, color=[0.5, 0.5, 0.5]) # 网格\n",
"\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"id": "17bd337a-d684-4bb7-9b57-054105665e5a",
"metadata": {},
"source": [
"## 定义向量"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "080c77e1-cab4-47cc-b722-8bc3fbe5a51a",
"metadata": {},
"outputs": [],
"source": [
"u = [0, 0, 4, 3] # 向量u的起点和分量"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "985922c6-9d7f-4a2f-9d45-a2df2d21f0a8",
"metadata": {},
"outputs": [],
"source": [
"v = [0, 0, -2, 4] # 向量v的起点和分量"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "61aae2a9-665b-4cf2-bd2e-e8a4bdbb75d1",
"metadata": {},
"outputs": [],
"source": [
"u_bis = [4, 3, v[2], v[3]] # u和v的组合向量"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "f3ce312e-bcb1-440b-b29a-335212853107",
"metadata": {},
"outputs": [],
"source": [
"w = [0, 0, 2, 7] # 向量w的起点和分量"
]
},
{
"cell_type": "markdown",
"id": "a52a3b62-fd8b-4302-8da0-2ac962ebd09a",
"metadata": {},
"source": [
"## 定义向量列表"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "e48cb395-a074-44e8-a053-347f55e2b4d7",
"metadata": {},
"outputs": [],
"source": [
"vectors = [u, u_bis, w] # 所有向量"
]
},
{
"cell_type": "markdown",
"id": "1c68bd01-79a2-47c7-b785-28c8198bf67c",
"metadata": {},
"source": [
"## 定义标注列表"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "e2c78180-546e-4ffc-9ac2-1385806034cc",
"metadata": {},
"outputs": [],
"source": [
"labels = [\n",
" (3, 1, r'$||\\vec{u}||_2$', 0), # 向量u的模长标注\n",
" (3, 6, r'$||\\vec{v}||_2$', 1), # 向量v的模长标注\n",
" (0, 4, r'$||\\vec{u}+\\vec{v}||_2$', 2) # 向量u+v的模长标注\n",
"]"
]
},
{
"cell_type": "markdown",
"id": "e41b2a77-b526-4a96-8e49-a602120b3df1",
"metadata": {},
"source": [
"## 调用自定义函数绘制图形"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "66d5a6c2-7dfa-4ba0-b092-55d9666bace7",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_vectors(vectors, labels)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ecd322f4-f919-4be2-adc3-69d28ef25e69",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}