NumPy 教程:线性代数(numpy.linalg 模块)和 python 示例
NumPy - 线性代数
NumPy 包包含 numpy.linalg
模块,它提供了线性代数所需的所有函数。下表描述了该模块中的一些重要功能。 ? 3.
inner
两个数组的内积 matmul
两个数组的矩阵积 行列式
的决定因素是数组 求解
求解线性矩阵方程 inv
求矩阵的乘法逆矩阵 numpy.dot()
该函数返回两个数组点积的逆。对于二维向量,这相当于矩阵乘法。对于一维数组,它是向量的内积。对于N维数组,它是a
的最后一个轴与b
的倒数第二个轴之和的乘积。
import numpy.matlib
import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([[11,12],[13,14]])
np.dot(a,b)
Python输出如下:
[[37 40]
[85 92]]
Python请注意,点积的计算方式为:
[[1*11+2*13, 1*12+2*14],[3*11+4*13, 3*12+4*14]]
numpy.vdot()
此函数返回两个向量的点积。如果第一个参数是复数,则在计算中使用其复共轭。如果参数id
是一个多维数组,它将被扩展。
示例
import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([[11,12],[13,14]])
print np.vdot(a,b)
Python输出结果如下:
130
Python注: 此函数返回一维数组的向量内积。对于更高的维度,它返回最后一个轴上总和的乘积。 示例 输出如下: 示例 输出如下: 上面的例子中,内积计算如下: 另一方面,如果任一参数是一维数组,则通过在其维度上添加 1 来将其提升为矩阵,并在乘法后将其删除。 示例 输出如下: 示例 输出类似于s Python 示例 如下: 行列式是线性代数中非常有用的值。它是根据方阵的对角线元素计算的。对于 2×2 矩阵,它是左上角和右下角元素的乘积与其他两个元素的乘积之间的差。 换句话说,对于矩阵 示例 输出如下: 示例 考虑以下线性方程: 可以使用如下矩阵表示: 如果矩阵变为 ❀ 或 示例 输出如下: 示例 ♽ 让我们在矩阵中创建一个矩阵示例。 输出结果如下: 也可以使用以下函数得到结果1*11 + 2*12 + 3*13 + 4*14 = 130 。
numpy.inner()
Pythonimport numpy as np
print np.inner(np.array([1,2,3]),np.array([0,1,0]))
# 等价于 1*0+2*1+3*0
Python2
Python# 多维数组示例
import numpy as np
a = np.array([[1,2], [3,4]])
print '数组 a:'
print a
b = np.array([[11, 12], [13, 14]])
print '数组 b:'
print b
print '内积:'
print np.inner(a,b)
Python数组 a:
[[1 2]
[3 4]]
数组 b:
[[11 12]
[13 14]]
内积:
[[35 41]
[81 95]]
Python1*11+2*12, 1*13+2*14
3*11+4*12, 3*13+4*14
numpy.matmul
numpy.matmul()
函数返回两个数组的矩阵乘积。尽管它返回二维数组的正常乘积,但如果任一参数的维度大于 2,则它将被视为最后两个索引处存在的矩阵堆栈并相应地进行广播。
Python# 对于二维数组,它就是矩阵乘法
import numpy.matlib
import numpy as np
a = [[1,0],[0,1]]
b = [[4,1],[2,2]]
print np.matmul(a,b)
Python[[4 1]
[2 2]]
Python # 维度大于二的数组
import numpy.matlib
import numpy as np
a = np.arange(8).reshape(2,2,2)
b = np.arange(4).reshape(2,2)
print np.matmul(a,b)
Python[[[2 3]
[6 11]]
[[10 19]
[14 27]]]
numpy.linalg.det()
[[a,b],[c,d]]
,行列式计算为ad-bc。较大的方阵被视为 2×2 矩阵的组合。函数
numpy.linalg.det()
计算输入矩阵的行列式。
Pythonimport numpy as np
a = np.array([[1,2], [3,4]])
print np.linalg.det(a)
Python-2.0
Python 如下Python:Pythonb = np.array([[6,1,1], [4, -2, 5], [2,8,7]])
print b
print np.linalg.det(b)
print 6*(-2*7 - 5*8) - 1*(4*7 - 5*2) + 1*(4*8 - -2*2)
num py.linalg. solve()
numpy 函数 .linalg.solve()
以矩阵形式给出线性方程的解。
Pythonx + y + z = 6
2y + 5z = -4
2x + 5y - z = 27
❀ X 和 B
,方程变为:
PythonAX = B
PythonX = A^(-1)B
numpy。我们使用 inv() numpy.linalg.inv()
函数来计算矩阵逆。矩阵的逆是这样的,如果乘以原始矩阵,就会得到单位矩阵。
Pythonimport numpy as np
x = np.array([[1,2],[3,4]])
y = np.linalg.inv(x)
print x
print y
print np.dot(x,y)
Python[[1 2]
[3 4]]
[[-2. 1. ]
[ 1.5 -0.5]]
[[ 1.00000000e+00 1.11022302e-16]
[ 0.00000000e+00 1.00000000e+00]]
Pythonimport numpy as np
a = np.array([[1,1,1],[0,2,5],[2,5,-1]])
print '数组 a:'
print a
ainv = np.linalg.inv(a)
print 'a 的逆:'
print ainv
print '矩阵 b:'
b = np.array([[6],[-4],[27]])
print b
print '计算:A^(-1)B:'
x = np.linalg.solve(a,b)
print x
# 这就是线性方向 x = 5, y = 3, z = -2 的解
Python数组 a:
[[ 1 1 1]
[ 0 2 5]
[ 2 5 -1]]
a 的逆:
[[ 1.28571429 -0.28571429 -0.14285714]
[-0.47619048 0.14285714 0.23809524]
[ 0.19047619 0.14285714 -0.0952381 ]]
矩阵 b:
[[ 6]
[-4]
[27]]
计算:A^(-1)B:
[[ 5.]
[ 3.]
[-2.]]
x = np.dot(ainv,b)
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。