Premise:
分析:
要生成两个矩阵,A为高斯(正态分布)矩阵,可以numpy.random.normal获得;B为Toeplitz矩阵,可用scipy.linalg 中的toeplitz获得。
内置函数等介绍:
numpy.random.normal(loc=0.0, scale=1.0, size=None)
对应于高斯分布的概率密度函数,第一,二个参数分别为均值和标准差,最后为输出的形状。例如numpy.random.normal(loc=0, scale=1, size=(2,3))正态分布的矩阵。scipy.linalg.toeplitz(c, r=None)
用于生成toeplitz矩阵,第一个参数为矩阵的第一列,第二个为矩阵的第一行(默认为c的转置)。
代码实现:
import numpy as np
import time
from scipy.linalg import toeplitz
#N(0,1)gaussian
mu,sigma = 0,1 #mean and standard deviation
n,m = 200,500 #the dimension of A
A = np.random.normal(loc=mu, scale=sigma, size=(n,m))
c = list(range(1,m+1))
B = toeplitz(c,c)
Exercise 9.1: Matrix operations:
分析:
矩阵之间的简单运算,使用简单的运算符或numpy的相关方法即可实现,I为单位矩阵,可用方法numpy.eye获得。
内置函数等介绍:
- 基本运算
获得矩阵A的转置:A.T
共轭矩阵:A.I
矩阵相加减:A+A A-A
逆矩阵:numpy.linalg.inv(a)
矩阵相乘:a.dot(b.T) numpy.dot(a,b) a*b
求迹: np.trace(a) - 生成对角矩阵
numpy.eye(N,M=None, k=0, dtype=(type ‘float’))
第一个参数为输出方阵(行数=列数)的规模,即行数或列数,第二个参数k默认情况下输出的是对角线全“1”,其余全“0”的方阵,如果k为正整数,则在右上方第k条对角线全“1”其余全“0”,k为负整数则在左下方第k条对角线全“1”其余全“0”。例如:
>>> np.eye(2, dtype=int)
array([[1, 0],
[0, 1]])
>>> np.eye(3, k=1)
array([[ 0., 1., 0.],
[ 0., 0., 1.],
[ 0., 0., 0.]])
代码实现:
其中函数以lambda为2调用
#9.1
print("---9.1:Matrix operations")
print("calculate A+A:")
dA = A+A
print(dA)
print("calculate AA(T):")
mA = np.dot(A,A.T)
print(mA)
print("calculate A(T)A:")
mA2 = np.dot(A.T,A)
print(mA2)
print("calculate AB:")
mAB = np.dot(A,B)
print(mAB)
def func(A, B, lamb):
C = B-lamb*(np.eye(m))
print(np.dot(A,C))
print("calculate A(B-I) for = 2:")
func(A,B,2)
Exercise 9.2: Solving a linear system
分析:
numpy.linalg中的函数solve可以求解形如 Ax = b