{ "cells": [ { "cell_type": "markdown", "id": "73bd968b-d970-4a05-94ef-4e7abf990827", "metadata": {}, "source": [ "Chapter 04\n", "\n", "# 矩阵逆\n", "Book_4《矩阵力量》 | 鸢尾花书:从加减乘除到机器学习 (第二版)" ] }, { "cell_type": "markdown", "id": "c83af894-1177-41f1-9e0c-5df36a5e4755", "metadata": {}, "source": [ "该代码演示了 `np.matrix` 和 `np.array` 在计算矩阵逆时的区别。矩阵 $A$ 被定义为 `np.matrix` 类型,直接使用 `.I` 属性即可求逆;而矩阵 $B$ 被定义为 `np.array` 类型,不支持 `.I` 属性,因此会报错。\n", "\n", "矩阵 $A$ 的定义为:\n", "\n", "$$\n", "A = \\begin{bmatrix} 1 & 2 \\\\ 3 & 4 \\end{bmatrix}\n", "$$\n", "\n", "其逆矩阵为:\n", "\n", "$$\n", "A^{-1} = \\begin{bmatrix} -2 & 1 \\\\ 1.5 & -0.5 \\end{bmatrix}\n", "$$\n", "\n", "`np.matrix` 类型允许直接调用 `.I` 属性计算逆矩阵,而 `np.array` 类型则需使用 `numpy.linalg.inv` 函数求逆。" ] }, { "cell_type": "markdown", "id": "a7654b39-8ea4-480f-9b62-949c3e52bbfe", "metadata": {}, "source": [ "## 导入所需库" ] }, { "cell_type": "code", "execution_count": 1, "id": "e3ba8f7c-9319-46f3-a52c-9eeef1ed5ae5", "metadata": {}, "outputs": [], "source": [ "import numpy as np # 导入NumPy库,用于数值计算" ] }, { "cell_type": "markdown", "id": "b11501ac-e96b-45ab-9563-63977efe46f7", "metadata": {}, "source": [ "## 定义矩阵A并计算其逆" ] }, { "cell_type": "code", "execution_count": 2, "id": "368c1708-7217-4844-9b32-3e9398c15358", "metadata": {}, "outputs": [], "source": [ "A = np.matrix([[1, 2], # 定义为np.matrix类型的矩阵A\n", " [3, 4]])" ] }, { "cell_type": "code", "execution_count": 3, "id": "56017ddb-fe6d-4d98-ba7a-963a3b854428", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[-2. 1. ]\n", " [ 1.5 -0.5]]\n" ] } ], "source": [ "print(A.I) # 打印矩阵A的逆矩阵" ] }, { "cell_type": "markdown", "id": "fb72cfe6-f62d-42a2-ac12-3a551854f4cb", "metadata": {}, "source": [ "## 定义数组B并尝试计算其逆" ] }, { "cell_type": "code", "execution_count": 4, "id": "abc5a48d-5499-41e4-b826-a9b63acfd8ba", "metadata": {}, "outputs": [], "source": [ "B = np.array([[1, 2], # 定义为np.array类型的数组B\n", " [3, 4]])" ] }, { "cell_type": "code", "execution_count": 6, "id": "afd919b3-7d56-4543-b1fb-a78bca4bbc26", "metadata": {}, "outputs": [ { "ename": "AttributeError", "evalue": "'numpy.ndarray' object has no attribute 'I'", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[6], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28mprint\u001b[39m(B\u001b[38;5;241m.\u001b[39mI)\n", "\u001b[1;31mAttributeError\u001b[0m: 'numpy.ndarray' object has no attribute 'I'" ] } ], "source": [ "print(B.I) # 尝试打印数组B的逆,会报错" ] }, { "cell_type": "code", "execution_count": null, "id": "85a80909-2aac-49ed-bb7a-f8cc6b80ee7d", "metadata": {}, "outputs": [], "source": [] }, { "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 }