import numpy as np
# 代码4-14
# 方法一
A1 = np.matrix('1 2 3 4;3 4 5 6;5 6 7 8;7 8 9 0')
print('使用mat函数创建的矩阵为:\n', A1)
使用mat函数创建的矩阵为:
[[1 2 3 4]
[3 4 5 6]
[5 6 7 8]
[7 8 9 0]]
# 方法二
A2 = np.mat([[1, 2, 3, 4],[3, 4, 5, 6],[5, 6, 7, 8],[7, 8, 9, 0]])
print('使用matrix函数创建的矩阵为:\n', A2)
使用matrix函数创建的矩阵为:
[[1 2 3 4]
[3 4 5 6]
[5 6 7 8]
[7 8 9 0]]
# 代码4-15
O = np.zeros((3, 3))
print('零矩阵O为:\n', O)
零矩阵O为:
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
# 代码4-16
# 使用identity函数创建3行3列的单位矩阵
E = np.identity(3)
print('单位矩阵E为:\n', E)
单位矩阵E为:
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
# 使用eye函数创建3行3列的单位矩阵
I = np.eye(5, k = -1)
print('单位矩阵I为:\n', I)
单位矩阵I为:
[[0. 0. 0. 0. 0.]
[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]]
# 代码4-17
A = np.diag([1, 3, 5, 7], k = 1)
print('对角矩阵A为:\n', A)
对角矩阵A为:
[[0 1 0 0 0]
[0 0 3 0 0]
[0 0 0 5 0]
[0 0 0 0 7]
[0 0 0 0 0]]
# 代码4-18
B = np.matrix([[1, 2, 3, 4],[3, 4, 5, 6],[5, 6, 7, 8],[7, 8, 9, 10]])
A = np.triu(B, k = 0)
print('上三角矩阵A为:\n', A)
上三角矩阵A为:
[[ 1 2 3 4]
[ 0 4 5 6]
[ 0 0 7 8]
[ 0 0 0 10]]
# 代码4-19
B = np.matrix([[1, 2, 3, 4],[3, 4, 5, 6],[5, 6, 7, 8],[7, 8, 9, 10]])
A = np.tril(B, k = 0)
print('下三角矩阵A为:\n', A)
下三角矩阵A为:
[[ 1 0 0 0]
[ 3 4 0 0]
[ 5 6 7 0]
[ 7 8 9 10]]
# 代码4-20
A = np.matrix([[1, 2, 3],[4, 5, 6]])
#B = np.matrix([[4, 5, 6],[7, 8, 9]])
#B = np.matrix([7, 8, 9])
#[[7 8 9][7 8 9]]
#B = np.matrix([[4],[7]])
#[[4 4 4][7 7 7]]
B = np.matrix([10])
#B = 11
print('矩阵A与矩阵B的和为:\n', A + B)
矩阵A与矩阵B的和为:
[[11 12 13]
[14 15 16]]
# 代码4-21
A = np.matrix([[1, 2, 3],[4, 5, 6]])
k = 3
print('矩阵A与数k的乘积为:\n', A * k)
矩阵A与数k的乘积为:
[[ 3 6 9]
[12 15 18]]
# 代码4-22
A = np.matrix([[11, 12, 13],[21, 22, 23],[31, 32, 33]])
B = np.matrix([[4, 5],[6, 7],[8, 9]])
#A的列数跟B的行数相等
print('矩阵乘积为:\n', A * B) # 方法一
矩阵乘积为:
[[220 256]
[400 466]
[580 676]]
print('矩阵乘积为:\n', np.dot(A, B)) # 方法二
矩阵乘积为:
[[220 256]
[400 466]
[580 676]]
C =np.matrix([[11*4 + 12*6 + 13*8, 11*5 + 12*7 + 13*9],[21*4 + 22*6 + 23*8, 21*5 + 22*7 + 23*9],[31*4 + 32*6 + 33*8, 31*5 + 32*7 + 33*9]])
print('矩阵乘积为:\n', C) # 展开计算
密文矩阵为:
[[220 256]
[400 466]
[580 676]]
# 代码4-23
B = np.mat('16 25;20 8;15 14')
print('矩阵B的转置矩阵为:\n', B.T)
矩阵B的转置矩阵为:
[[16 20 30]
[25 8 14]]
# 代码4-24
A = np.matrix([[11, 12, 13],[21, 22, 23],[31, 32, 33]])#行列式为0,np.linalg.det(A)==0,A为奇异矩阵不可逆
A1 = np.matrix([[1, 2, 3],[1, 1, 2],[0, 1, 2]])
B = np.matrix([[16, 25],[20, 8],[15, 14]])
C = A1 * B
print('加密矩阵矩阵为:\n', C)
加密矩阵矩阵为:
[[101 83]
[ 66 61]
[ 50 36]]
A1 = np.matrix([[1, 2, 3],[1, 1, 2],[0, 1, 2]])
#print(np.linalg.det(A1))#当行列式非常接近0时,求得结果不准确
C = np.matrix([[101, 83],[66, 61],[50, 36]])
print('密钥矩阵为:\n', (A1.I) * C) # 方法一
密钥矩阵为:
[[16. 25.]
[20. 8.]
[15. 14.]]
print('密钥矩阵为:\n', np.linalg.inv(A1) * C) # 方法二
密钥矩阵为:
[[16. 25.]
[20. 8.]
[15. 14.]]
# 代码4-25
A = np.matrix([[11, 12, 13, 14],[21, 22, 23, 24],[31, 32,33, 34],[41, 42, 43, 44]])
print('矩阵A的秩为:', np.linalg.matrix_rank(A))
矩阵A的秩为: 2
# 代码4-26
A = np.matrix([[1, -1, 0, 0],[0, 1, -1, 0],[0, 0, 1, -1],[-1, 0, 0, 1]])
B = np.matrix([[1, -1, 0, 0, 160],[0, 1, -1, 0, -40],[0, 0, 1, -1, 210],[-1, 0, 0, 1, -330]])
print('矩阵A的秩为:', np.linalg.matrix_rank(A))
print('矩阵B的秩为:', np.linalg.matrix_rank(B))
矩阵A的秩为: 3
矩阵B的秩为: 3
# 代码4-27
x = np.random.random(size=(2,5)) # 生成2行5列的数据
Vx = np.cov(x)
print('矩阵x的协方差矩阵为:\n', Vx)
矩阵x的协方差矩阵为:
[[0.11828238 0.00253691]
[0.00253691 0.00740114]]
# 代码4-28
x = np.random.random(size=(2,5)) #生成2行5列的矩阵
R = np.corrcoef(x)
print('矩阵x的相关矩阵为:\n', R)
矩阵x的相关矩阵为:
[[ 1. -0.07738068]
[-0.07738068 1. ]]