#!/usr/bin/env python # coding: utf-8 # In[134]: #全部行都能输出 from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity = "all" # In[135]: import numpy as np # # numpy矩阵模块matlib # NumPy 包包含一个 Matrix 库 numpy.matlib 。此模块的函数返回矩阵而不是返回 ndarray对象。 # 矩阵是一个二维数组 # In[64]: import numpy.matlib # ## np.matlib.empty(shape) # 函数返回一个新的矩阵,且不初始化元素。里面的初始化数据无意义 # In[65]: m = np.matlib.empty(5) m # In[66]: m = np.matlib.empty((2,2)) type(m) m # In[67]: m = np.matlib.empty((2,2,4)) # 三维的数组不会是矩阵 type(m) m # ## np.matlib.zeros(shape) # 返回一个全0的矩阵 # In[68]: np.matlib.zeros(5) # In[69]: np.matlib.zeros((3, 4)) # ## np.matlib.ones(shape) # 返回一个全1的矩阵 # In[70]: np.matlib.ones((3, 5)) # ## np.matlib.eye(行, 列=行, k偏移) # 这个函数返回一个矩阵,对角线元素为 1,其他位置为零。 # In[71]: np.matlib.eye(3) # 列数默认等于行数 # In[72]: np.matlib.eye(3, 4) # In[73]: np.matlib.eye(3, 4, 1) # k=1向上偏移1 # In[74]: np.matlib.eye(3, 4, -1) # k=1向下偏移1 # ## np.matlib.identity(阶数) # 函数返回给定大小的单位矩阵。单位矩阵是主对角线元素都为 1 的**方阵**。 # In[75]: np.matlib.identity(3) # In[76]: np.matlib.identity(5) # ## np.matlib.rand(shape) # 这个函数以[0, 1)的数组成的二维数组 # In[77]: np.matlib.rand(4) # In[78]: np.matlib.rand((3, 5)) # In[79]: np.matlib.rand((3, 4, 5)) # 不能超出二维 # # numpy线性代数模块linalg # NumPy 包包含 numpy.linalg 模块,提供线性代数所需的所有功能。 # - numpy.linalg.det() 计算输入矩阵的行列式 # - numpy.linalg.solve() 求解矩阵形式的线性方程的解 # - numpy.linalg.inv() 计算矩阵的逆 # ## np.matmul(a, b) # 函数返回两个数组的矩阵乘积 # In[181]: a = np.array([[1,2],[3,4]]) b = np.array([[11,12],[13,14]]) a b # In[182]: np.matmul(a, b) # In[ ]: # ## np.linalg.det(a) # 求矩阵的行列式 # 只有方阵才有对应的行列式 # In[183]: a = np.array([[1, 2], [3, 4]]) a # In[184]: np.linalg.det(a) # In[185]: 1*4-2*3 # In[186]: a = np.array([[1, 2, 3], [1, 3, 3], [1, 0, 3]]) a # In[187]: np.linalg.det(a) # **行列式等于0,说明存在完全的线性相关性** # ## np.linalg.solve() # 该函数给出了矩阵形式的线性方程的解。 # 例如,考虑以下线性方程: # `x + y + z = 6` # `2y + 5z = -4` # `2x + 5y - z = 27` # # 可以使用矩阵表示为: # # $ # \left[ # \begin{matrix} # 1 & 1 & 1 \\ # 0 & 2 & 5 \\ # 2 & 5 & -1 # \end{matrix} # \right] # $ # . # $ # \left[ # \begin{matrix} # x \\ # y \\ # z # \end{matrix} # \right] # $ # = # $ # \left[ # \begin{matrix} # 6 \\ # -4 \\ # 27 # \end{matrix} # \right] # $ # 方程变为:AX = B # A是一个矩阵, 即一个二维数组 # B是一个一维的数组 # # In[188]: A = np.array([[1, 1, 1], [0, 2, 5], [2, 5, -1]]) A # In[189]: B = np.array([6, -4, 27]) B # In[190]: np.linalg.solve(A, B) # 则解出: x=5, y=3, z=-2 # 可以利用矩阵乘法验证下 # In[191]: a = np.linalg.solve(A, B) # In[192]: np.matmul(A, a) # ## np.linalg.inv(a) # 返回矩阵的逆矩阵 # In[193]: a = np.array([[1,2],[3,4]]) a # In[194]: np.linalg.inv(a) # In[ ]: