4 2 線性代數linalg模組

2021-08-03 05:32:55 字數 2302 閱讀 7682

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 什麼是線性代數?

線性代數幾乎是每個學理工科的大學生都會學的一門課,然而我感覺大家對這門課的感覺都不怎麼好,很多人都覺得不知道線性代數是做什麼的,或者為了應付考試學會了一些計算和解題的方法。但在其他課程學習中卻常常看到那些矩陣 向量等等,便頭疼萬分,對線性代數更是深惡痛絕。最後乙個大學學下來,還是沒明白線性代數是什麼...