4.2 矩阵运算

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.        ]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值