7、numpy之线性代数函数

np.diag(数组,k)

  • 返回一维数组作为对角线的矩阵
  • 返回二维矩阵的对角线
  • k为正整数是对角线以上的元素列表
  • k为负整数是对角线以下的元素列表

np.trace

  • 对角线元素的和

np.linalg.det(数组)

  • 数组的行列式
  • 数组必须是方阵

np.linalg.eig(数组)

  • 数组的特征值和特征向量
  • 数组必须是方阵

np.linalg.inv(数组)

  • 数组的逆
  • 数组必须是非奇异方阵

np.linalg.pinv(数组)

  • 数组的伪逆

np.linalg.svd(数组)

  • 数组的奇异值分解
import numpy as np
d=np.random.randn(3,3)
print('2维方阵:\n',d)
print('d的对角线:\n',np.diag(d))
print('d的对角线以上的第一个元素列表:\n',np.diag(d,1))
print('d的对角线以下的第二个元素列表:\n',np.diag(d,-2))
print('d的对角线对应的对角矩阵:\n',np.diag(np.diag(d)))
print('d的对角线元素的和:\n',np.trace(d))
print('d矩阵的行列式:\n',np.linalg.det(d))
print('d矩阵的特征值和特征向量:\n',np.linalg.eig(d))
print('d矩阵的逆:\n',np.linalg.inv(d))
print('d矩阵的伪逆:\n',np.linalg.pinv(d))
print('d矩阵的QR分解:\n',np.linalg.qr(d))
print('d矩阵的奇异值分解:\n',np.linalg.svd(d))
print('d矩阵的奇异值分解:\n',np.linalg.solve(d))

runfile('C:/Users/xyy/.spyder-py3/temp.py', wdir='C:/Users/xyy/.spyder-py3')
2维方阵:
 [[-0.92124509  0.09588448 -0.50192459]
 [ 0.60636215  2.32003121  0.11376364]
 [ 0.25025469  1.22494175 -0.15661284]]
d的对角线:
 [-0.92124509  2.32003121 -0.15661284]
d的对角线以上的第一个元素列表:
 [0.09588448 0.11376364]
d的对角线以下的第二个元素列表:
 [0.25025469]
d的对角线对应的对角矩阵:
 [[-0.92124509  0.          0.        ]
 [ 0.          2.32003121  0.        ]
 [ 0.          0.         -0.15661284]]
d的对角线元素的和:
 1.24217328391547
d矩阵的行列式:
 0.39355387405711695
d矩阵的特征值和特征向量:
 (array([ 2.34783037, -0.9243052 , -0.18135189]), array([[ 0.04052868, -0.98275096, -0.55029394],
       [-0.89916127,  0.18266136,  0.09567255],
       [-0.43573665,  0.02890288,  0.82947173]]))
d矩阵的逆:
 [[-1.27733593 -1.52409032  2.98660225]
 [ 0.31363935  0.68577089 -0.50703065]
 [ 0.41203918  2.92835923 -5.57854522]]
d矩阵的伪逆:
 [[-1.27733593 -1.52409032  2.98660225]
 [ 0.31363935  0.68577089 -0.50703065]
 [ 0.41203918  2.92835923 -5.57854522]]
d矩阵的QR分解:
 (array([[-0.81459317, -0.5763499 , -0.06525914],
       [ 0.53616401, -0.70528095, -0.46379623],
       [ 0.22128288, -0.41279484,  0.88353512]]), array([[ 1.1309266 ,  1.43686904,  0.43520458],
       [ 0.        , -2.19718646,  0.27369783],
       [ 0.        ,  0.        , -0.15838092]]))
d矩阵的奇异值分解:
 (array([[-0.05856018, -0.98852338, -0.13925597],
       [ 0.88625772,  0.0127246 , -0.46301765],
       [ 0.45947575, -0.15053108,  0.87534132]]), array([2.70775756, 1.05338758, 0.13797685]), array([[ 0.26085325,  0.96513869,  0.02151481],
       [ 0.8360806 , -0.23700146,  0.4947722 ],
       [ 0.48262284, -0.11107482, -0.86875634]]))

np.dot(m,n)

  • 矩阵m与n的乘积
  • 结果矩阵的结构:(m的轴1,m的轴2,…,m的倒数第二个轴,n的最后一个轴)
  • n的第一个轴必须等于m的第二个轴
import numpy as np
d=np.arange(6).reshape(3,1,2)
e=np.random.randn(2,1).round(2)
print('d:\n',d)
print('e:\n',e)
print('d与e的乘积:\n',np.dot(d,e))

runfile('C:/Users/xyy/.spyder-py3/temp.py', wdir='C:/Users/xyy/.spyder-py3')
d:
 [[[0 1]]

 [[2 3]]

 [[4 5]]]
e:
 [[1.22]
 [0.06]]
d与e的乘积:
 [[[0.06]]

 [[2.62]]

 [[5.18]]]

np.linalg.solve(数组a,数组b)

  • 对ax=b求解
  • a必须为非奇异方阵
  • b从倒数第二个轴开始依次往前推,至少有‘a的轴数-1’个轴与a的轴相等
    (eg:a(2,2,2,2),那么b从倒数第二个轴开始,至少有3个轴都是2,如b(3,2,2,2,1))
import numpy as np
d=np.random.randn(3,3)
e=np.arange(6).reshape((2,3,1))
print('d:\n',d)
print('e:\n',e)
print('dx=e的解:\n',np.linalg.solve(d,e))

runfile('C:/Users/xyy/.spyder-py3/temp.py', wdir='C:/Users/xyy/.spyder-py3')
d:
 [[-0.3237826  -0.05781436  0.07139472]
 [-0.91090948 -0.56127665 -0.7013948 ]
 [ 0.29241977  0.34431695  0.67803068]]
e:
 [[[0]
  [1]
  [2]]

 [[3]
  [4]
  [5]]]
dx=e的解:
 [[[  21.42874057]
  [ -78.53166452]
  [  33.58785425]]

 [[  22.95557104]
  [-112.81978454]
  [  54.76610745]]]

np.linagl.lstsq(数组a,数组b)

  • 对ax=b求最小二乘解
  • a、b必须都是二维矩阵,且每个轴的维度要相等
import numpy as np
d=np.random.randn(2,3)
e=np.arange(6).reshape(2,3)
print('d:\n',d)
print('e:\n',e)
print('dx=e的最小二乘解:\n',np.linalg.lstsq(d,e))

runfile('C:/Users/xyy/.spyder-py3/temp.py', wdir='C:/Users/xyy/.spyder-py3')
d:
 [[-1.78536349  0.52288345  1.76682291]
 [-1.44736725 -0.40216682 -0.97816161]]
e:
 [[0 1 2]
 [3 4 5]]
dx=e的最小二乘解:
 (array([[-1.21165387, -1.84715466, -2.48265545],
       [-0.43183923, -0.48223461, -0.53263   ],
       [-1.09656773, -1.15783533, -1.21910293]]), array([], dtype=float64), 2, array([2.58883153, 1.75896409]))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值