linalg是linear algebra的縮寫,numpy和scipy都提供了線性代數函式庫linalg,scipy的線性代數庫比numpy更加全面。
linalg包含了許多方陣(包括矩陣)的基本運算函式,scipy.linalg.det()函式計算方陣的行列式,示例**:
>>> from scipy import linalg
>>> arr = np.array([[1, 2], [3, 4]])
>>> linalg.det(arr)
-2.0
>>> arr = np.array([[3, 2],[6, 4]])
>>> linalg.det(arr)
0.0>>> linalg.det(np.ones((3, 4))) #無論行列式還是逆矩陣只適用於n階矩陣的求解
traceback (most recent call last):
...valueerror: expected square matrix
scipy.linalg.inv()函式計算方陣的逆,示例**:
>>> arr = np.array([[1, 2], [3, 4]])
>>> iarr = linalg.inv(arr)
>>> iarr
array([[-2. , 1. ],
[ 1.5, -0.5]])
>>>np.allclose(np.dot(arr, iarr), np.eye(2)) #numpy.allclose()函式用於比較兩方陣所有對應元素值,如果完全相同返回真(true),否則返回假(false)
true
以下計算奇異陣(行列式為0)的逆,其結果將會報錯(linalgerror),示例**:
>>>arr = np.array([[3, 2], [6, 4]])
>>>linalg.inv(arr)
traceback (most recent call last):
......linalgerror: singular matrix
scipy.linalg.norm()函式計算方陣的模,示例**:
>>>a = np.matrix(np.random.random((2, 2)))
>>>a
>>>linalg.norm(a)
>>>linalg.norm(a, 1)
>>>linalg.norm(a, np.inf)
scipy.linalg.solve(a,b)和numpy.linalg.solve(a,b)可以用來解線性方程組ax=b,即計算x=a-1b。這裡,a是mn的方形矩陣,x和b是長為m的向量。有時候a是固定的,需要對多組b進行求解,因此第二個引數也可以是mn的矩陣b。這樣計算出來的x也是m*n的矩陣,相當於計算a-1b。
在一些矩陣公式中經常會出現類似於a-1b的運算,它們都可以用solve(a, b)計算,這要比直接逆矩陣然後做矩陣乘法更快捷一些,下面的程式比較solve()和逆矩陣的運算速度,示例**:
import numpy as np
from scipy import linalg
m, n = 500, 50
a = np.random.rand(m, m)
b = np.random.rand(m, n)
x1 = linalg.solve(a, b)
x2 = np.dot(linalg.inv(a), b)
print(np.allclose(x1, x2))
%timeit linalg.solve(a, b)
%timeit np.dot(linalg.inv(a), b)
n*n的矩陣a可以看作n維空間中的線性變換。若x為n維空間中的乙個向量,那麼a與x的矩陣乘積就是對x進行線性變換之後的向量。如果x是線性變換的特徵向量,那麼經過這個線性變換之後,得到的新向量仍然與原來的x保持在同一方向上,但其長度也許會改變。特徵向量的長度在該線性變換下縮放的比例稱為特徵值。即特徵向量x滿足如下等式,λ的值可以是乙個任意複數:ax=λx。
下面以二維平面上的線性變換矩陣為例,演示特徵值和特徵向量的幾何含義。通過linalg.eig(a)計算矩陣a的兩個特徵值evalues和特徵向量evectors,在evectors中,每一列是乙個特徵向量。示例**:
>>> a = np.array([[1, -0.3], [-0.1, 0.9]])
>>> evalues, evectors = linalg.eig(a)
numpy矩陣相關和線性代數linalg模組
單位矩陣e 單位矩陣 8540268 矩陣求逆 矩陣計算 numpy.linalg模組包含線性代數的函式。使用這個模組,可以計算逆矩陣 求特徵值 解線性方程組以及求解行列式等。import numpy as np 1.計算逆矩陣 建立矩陣 a np.mat 0 1 2 1 0 3 4 3 8 pri...
線性代數 線性代數的本質
線性代數在機器學習的領域中扮演者十分重要的角色,所以這裡岔開先整理一些線性代數的基本概念和計算方法。這裡是3blue1brown的線性代數課程的截圖和筆記。作為快速複習的網路筆記。本課程的特點 通過影象展現線性代數計算在幾何圖形上意義。這樣能更好的理解線性代數為什麼叫做線性代數。線性代數為什麼採用這...
線性代數入門 1 什麼是線性代數?
線性代數幾乎是每個學理工科的大學生都會學的一門課,然而我感覺大家對這門課的感覺都不怎麼好,很多人都覺得不知道線性代數是做什麼的,或者為了應付考試學會了一些計算和解題的方法。但在其他課程學習中卻常常看到那些矩陣 向量等等,便頭疼萬分,對線性代數更是深惡痛絕。最後乙個大學學下來,還是沒明白線性代數是什麼...