欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

线性代数

程序员文章站 2022-07-12 14:51:17
...
In [138]: x = np.array([[1., 2., 3.], [4., 5., 6.]])

In [139]: y = np.array([[6., 23.], [-1., 7], [8., 9.]])

In [140]: x
Out[140]:
array([[1., 2., 3.],
       [4., 5., 6.]])

In [141]: y
Out[141]:
array([[ 6., 23.],
       [-1.,  7.],
       [ 8.,  9.]])

In [142]: x.dot(y)
Out[142]:
array([[ 28.,  64.],
       [ 67., 181.]])

x.dot(y) 等价np.dot(x, y)

In [143]: np.dot(x, y)
Out[143]:
array([[ 28.,  64.],
       [ 67., 181.]])

特殊符号@也作为中缀操作符 用于点乘矩阵操作

In [145]: x @ np.ones(3)
Out[145]: array([ 6., 15.])

numpy.linalg拥有一个矩阵分解的标准函数集,以及其他常用函数,例如求逆和行列式求解。

In [146]: from numpy.linalg import inv, qr

In [147]: X = np.random.randn(5, 5)

In [148]: mat = X .T .dot(X)

In [149]: inv(mat)
Out[149]:
array([[  3.81634213,  -0.33734926,  -8.29257805, -19.34806895,
         12.16184347],
       [ -0.33734926,   0.24647885,   1.26970515,   2.94427259,
         -1.97488616],
       [ -8.29257805,   1.26970515,  26.08526755,  60.89076132,
        -38.32595465],
       [-19.34806895,   2.94427259,  60.89076132, 142.58472207,
        -89.65423579],
       [ 12.16184347,  -1.97488616, -38.32595465, -89.65423579,
         56.58562833]])

In [150]: mat.dot(inv(mat))
Out[150]:
array([[ 1.00000000e+00,  0.00000000e+00, -8.88178420e-16,
         0.00000000e+00,  0.00000000e+00],
       [ 0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
        -5.68434189e-14,  5.68434189e-14],
       [ 1.42108547e-14,  0.00000000e+00,  1.00000000e+00,
        -5.68434189e-14,  1.70530257e-13],
       [-7.10542736e-15,  0.00000000e+00, -2.84217094e-14,
         1.00000000e+00, -5.68434189e-14],
       [-1.42108547e-14,  0.00000000e+00,  5.68434189e-14,
         0.00000000e+00,  1.00000000e+00]])

In [151]: q,r = qr(mat)

In [152]: q
Out[152]:
array([[-0.83864776, -0.39066785,  0.3558009 ,  0.07715658,  0.10724336],
       [ 0.41520162, -0.71433003,  0.07867346,  0.55753694, -0.01741458],
       [-0.2870064 , -0.25961934, -0.85786848, -0.00839819, -0.33795897],
       [ 0.10910234, -0.22246167,  0.34657706, -0.43987118, -0.79057269],
       [ 0.17320954, -0.46927586, -0.1056514 , -0.69974441,  0.4989731 ]])

In [153]: r
Out[153]:
array([[-1.03628672e+00,  5.07388454e+00, -3.59320544e+00,
         3.42845808e+00,  3.40120764e+00],
       [ 0.00000000e+00, -9.79075704e+00, -5.06108475e+00,
        -3.59439551e+00, -9.47287516e+00],
       [ 0.00000000e+00,  0.00000000e+00, -1.31905677e+01,
         4.44252096e+00, -1.89722959e+00],
       [ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
        -2.88582436e+00, -4.58466452e+00],
       [ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
         0.00000000e+00,  8.81801825e-03]])
函数 描述
diag 将一个方阵的对角(或非对角)元素作为一维数组返回,或者将一维数组转换成一个方阵,并且在非对角线上有零点
dot 矩阵点乘
trace 计算对角元素和
det 计算矩阵的行列式
eig 计算方阵的特征值和特征向量
inv 计算矩阵的逆矩阵
pinv 计算矩阵的Moore-Penrose伪逆
qr 计算QR分解
svd 计算奇异值分解(SVD)
solve 求解x的线性系统Ax = b,其中A是方阵
lstsq 计算Ax = b的最小二乘解

上一篇: 线性代数

下一篇: NumPy 线性代数