NumPy 包包含numpy.linalg
模塊,提供線性代數(shù)所需的所有功能。 此模塊中的一些重要功能如下表所述。
序號 | 函數(shù)及描述 |
---|---|
1. | dot 兩個數(shù)組的點積 |
2. | vdot 兩個向量的點積 |
3. | inner 兩個數(shù)組的內(nèi)積 |
4. | matmul 兩個數(shù)組的矩陣積 |
5. | determinant 數(shù)組的行列式 |
6. | solve 求解線性矩陣方程 |
7. | inv 尋找矩陣的乘法逆矩陣 |
numpy.dot()
此函數(shù)返回兩個數(shù)組的點積。 對于二維向量,其等效于矩陣乘法。 對于一維數(shù)組,它是向量的內(nèi)積。 對于 N 維數(shù)組,它是a
的最后一個軸上的和與b
的倒數(shù)第二個軸的乘積。
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)
輸出如下:
[[37 40]
[85 92]]
要注意點積計算為:
[[1*11+2*13, 1*12+2*14],[3*11+4*13, 3*12+4*14]]
numpy.vdot()
此函數(shù)返回兩個向量的點積。 如果第一個參數(shù)是復(fù)數(shù),那么它的共軛復(fù)數(shù)會用于計算。 如果參數(shù)id
是多維數(shù)組,它會被展開。
例子
import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([[11,12],[13,14]])
print np.vdot(a,b)
輸出如下:
130
注意:1*11 + 2*12 + 3*13 + 4*14 = 130
。
numpy.inner()
此函數(shù)返回一維數(shù)組的向量內(nèi)積。 對于更高的維度,它返回最后一個軸上的和的乘積。
例子
import numpy as np
print np.inner(np.array([1,2,3]),np.array([0,1,0]))
# 等價于 1*0+2*1+3*0
輸出如下:
2
例子
# 多維數(shù)組示例
import numpy as np
a = np.array([[1,2], [3,4]])
print '數(shù)組 a:'
print a
b = np.array([[11, 12], [13, 14]])
print '數(shù)組 b:'
print b
print '內(nèi)積:'
print np.inner(a,b)
輸出如下:
數(shù)組 a:
[[1 2]
[3 4]]
數(shù)組 b:
[[11 12]
[13 14]]
內(nèi)積:
[[35 41]
[81 95]]
上面的例子中,內(nèi)積計算如下:
1*11+2*12, 1*13+2*14
3*11+4*12, 3*13+4*14
numpy.matmul
numpy.matmul()
函數(shù)返回兩個數(shù)組的矩陣乘積。 雖然它返回二維數(shù)組的正常乘積,但如果任一參數(shù)的維數(shù)大于2,則將其視為存在于最后兩個索引的矩陣的棧,并進(jìn)行相應(yīng)廣播。
另一方面,如果任一參數(shù)是一維數(shù)組,則通過在其維度上附加 1 來將其提升為矩陣,并在乘法之后被去除。
例子
# 對于二維數(shù)組,它就是矩陣乘法
import numpy.matlib
import numpy as np
a = [[1,0],[0,1]]
b = [[4,1],[2,2]]
print np.matmul(a,b)
輸出如下:
[[4 1]
[2 2]]
例子
# 二維和一維運算
import numpy.matlib
import numpy as np
a = [[1,0],[0,1]]
b = [1,2]
print np.matmul(a,b)
print np.matmul(b,a)
輸出如下:
[1 2]
[1 2]
例子
# 維度大于二的數(shù)組
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)
輸出如下:
[[[2 3]
[6 11]]
[[10 19]
[14 27]]]
numpy.linalg.det()
行列式在線性代數(shù)中是非常有用的值。 它從方陣的對角元素計算。 對于 2×2 矩陣,它是左上和右下元素的乘積與其他兩個的乘積的差。
換句話說,對于矩陣[[a,b],[c,d]]
,行列式計算為ad-bc
。 較大的方陣被認(rèn)為是 2×2 矩陣的組合。
numpy.linalg.det()
函數(shù)計算輸入矩陣的行列式。
例子
import numpy as np
a = np.array([[1,2], [3,4]])
print np.linalg.det(a)
輸出如下:
-2.0
例子
b = 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)
輸出如下:
[[ 6 1 1]
[ 4 -2 5]
[ 2 8 7]]
-306.0
-306
numpy.linalg.solve()
numpy.linalg.solve()
函數(shù)給出了矩陣形式的線性方程的解。
考慮以下線性方程:
x + y + z = 6
2y + 5z = -4
2x + 5y - z = 27
可以使用矩陣表示為:
如果矩陣成為A
、X
和B
,方程變?yōu)椋?/p>
AX = B
或
X = A^(-1)B
numpy.linalg.inv()
我們使用numpy.linalg.inv()
函數(shù)來計算矩陣的逆。 矩陣的逆是這樣的,如果它乘以原始矩陣,則得到單位矩陣。
例子
import numpy as np
x = np.array([[1,2],[3,4]])
y = np.linalg.inv(x)
print x
print y
print np.dot(x,y)
輸出如下:
[[1 2]
[3 4]]
[[-2. 1. ]
[ 1.5 -0.5]]
[[ 1.00000000e+00 1.11022302e-16]
[ 0.00000000e+00 1.00000000e+00]]
例子
現(xiàn)在讓我們在示例中創(chuàng)建一個矩陣A的逆。
import numpy as np
a = np.array([[1,1,1],[0,2,5],[2,5,-1]])
print '數(shù)組 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 的解
輸出如下:
數(shù)組 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.]]
結(jié)果也可以使用下列函數(shù)獲取
x = np.dot(ainv,b)