In [1]:
import numpy as np
在创建矩阵的专用字符串中,矩阵的行与行之间用分号隔开,行内的元素之间用空格隔开。
In [2]:
A = np.mat('1 2 3; 4 5 6; 7 8 9')
print "Creation from string:\n", A
In [3]:
# 转置
print "Transpose A :\n", A.T
# 逆矩阵
print "Inverse A :\n", A.I
In [4]:
# 通过NumPy数组创建矩阵
print "Creation from array: \n", np.mat(np.arange(9).reshape(3,3))
In [5]:
A = np.eye(2)
print "A:\n", A
B = 2 * A
print "B:\n", B
# 使用字符串创建复合矩阵
print "Compound matrix:\n", np.bmat("A B")
print "Compound matrix:\n", np.bmat("A B; B A")
In [6]:
A = np.mat("0 1 2; 1 0 3; 4 -3 8")
print "A:\n", A
inverse = np.linalg.inv(A)
print "inverse of A:\n", inverse
print "check inverse:\n", inverse * A
In [7]:
A = np.mat("3 4; 5 6")
print "A:\n", A
print "Determinant:\n", np.linalg.det(A)
In [8]:
A = np.mat("1 -2 1; 0 2 -8; -4 5 9")
print "A:\n", A
b = np.array([0,8,-9])
print "b:\n", b
In [9]:
x = np.linalg.solve(A, b)
print "Solution:\n", x
# check
print "Check:\n",b == np.dot(A, x)
print np.dot(A, x)
In [10]:
A = np.mat("3 -2; 1 0")
print "A:\n", A
print "Eigenvalues:\n", np.linalg.eigvals(A)
eigenvalues, eigenvectors = np.linalg.eig(A)
print "Eigenvalues:\n", eigenvalues
print "Eigenvectors:\n", eigenvectors
In [11]:
# check
# 计算 Ax = ax的左右两部分的值
for i in range(len(eigenvalues)):
print "Left:\n", np.dot(A, eigenvectors[:,i])
print "Right:\n", np.dot(eigenvalues[i], eigenvectors[:,i])
print
In [12]:
from IPython.display import Latex
Latex(r"$M=U \Sigma V^*$")
Out[12]:
*号表示共轭转置
In [13]:
A = np.mat("4 11 14;8 7 -2")
print "A:\n", A
U, Sigma, V = np.linalg.svd(A, full_matrices=False)
print "U:\n", U
print "Sigma:\n", Sigma
print "V:\n", V
In [14]:
# Sigma矩阵是奇异值矩阵对角线上的值
np.diag(Sigma)
Out[14]:
In [17]:
# check
M = U*np.diag(Sigma)*V
print "Product:\n", M
In [18]:
A = np.mat("4 11 14; 8 7 -2")
print "A:\n", A
In [19]:
pseudoinv = np.linalg.pinv(A)
print "Pseudo inverse:\n", pseudoinv
In [20]:
# check
print "Check pseudo inverse:\n", A*pseudoinv
得到的结果并非严格意义上的单位矩阵,但是非常近似。
In [21]:
A = np.mat("0 1 2; 1 0 3; 4 -3 8")
print "A:\n", A
inverse = np.linalg.inv(A)
print "inverse of A:\n", inverse
print "check inverse:\n", inverse * A
pseudoinv = np.linalg.pinv(A)
print "Pseudo inverse:\n", pseudoinv
print "Check pseudo inverse:\n", A*pseudoinv