@cible 學習筆記
numpy 定義了 matrix 型別,使用該 matrix 型別建立的是矩陣物件,它們的加減乘除運算預設採
用矩陣方式計算,因此用法和matlab十分類似。但是由於 numpy 中同時存在 ndarray 和 matrix
物件,因此使用者很容易將兩者弄混。這有違 python 的「顯式優於隱式」的原則,因此官方並不推薦
在程式中使用 matrix 。在這裡,我們仍然用 ndarray 來介紹。
矩陣的定義、矩陣的加法、矩陣的數乘、矩陣的轉置與二維陣列完全一致,不再進行說明,但矩陣的
乘法有不同的表示。
numpy.dot(a, b[, out]) 計算兩個矩陣的乘積,如果是一維陣列則是它們的內積。
numpy.linalg.eig(a) 計算方陣的特徵值和特徵向量。
numpy.linalg.ei**als(a) 計算方陣的特徵值。
import numpy as np
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 4, 5, 6])
z = np.dot(x, y)
print(z) #70
x = np.array([[1, 2, 3], [3, 4, 5], [6, 7, 8]])
print(x)
# [[1 2 3]
# [3 4 5]
# [6 7 8]]
y = np.array([[5, 4, 2], [1, 7, 9], [0, 4, 5]])
print(y)
# [[5 4 2]
# [1 7 9]
# [0 4 5]]
z = np.dot(x, y)
print(z)
# [[ 7 30 35]
# [ 19 60 67]
# [ 37 105 115]]
z = np.dot(y, x)
print(z)
# [[ 29 40 51]
# [ 76 93 110]
# [ 42 51 60]]
import numpy as np
# 建立乙個對角矩陣!
x = np.diag((1, 2, 3))
print(x)
# [[1 0 0]
# [0 2 0]
# [0 0 3]]
print(np.linalg.ei**als(x))
# [1. 2. 3.]
a, b = np.linalg.eig(x)
# 特徵值儲存在a中,特徵向量儲存在b中
print(a)
# [1. 2. 3.]
print(b)
# [[1. 0. 0.]
# [0. 1. 0.]
# [0. 0. 1.]]
有關奇異值分解的原理:奇異值分解(svd)及其應用
u, s, v = numpy.linalg.svd(a, full_matrices=true, compute_uv=true, hermitian=false) 奇異值分解
a 是乙個形如(m,n)矩陣
full_matrices 的取值是為false或者true,預設值為true,這時 u 的大小為(m,m), v 的
大小為(n,n)。否則 u 的大小為(m,k), v 的大小為(k,n) ,k=min(m,n)。
compute_uv 的取值是為false或者true,預設值為true,表示計算 u,s,v 。為false的時候
只計算 s 。
總共有三個返回值 u,s,v , u 大小為(m,m), s 大小為(m,n), v 大小為(n,n), a =
u*s*v 。
其中 s 是對矩陣 a 的奇異值分解。 s 除了對角元素不為 0 ,其他元素都為 0 ,並且對角元
素從大到小排列。 s 中有 n 個奇異值,一般排在後面的比較接近0,所以僅保留比較大的 r
個奇異值。
注:numpy中返回的 v 是通常所謂奇異值分解 a=u*s*v' 中 v 的轉置。
import numpy as np
a = np.array([[4, 11, 14], [8, 7, ‐2]])
print(a)
# [[ 4 11 14]
# [ 8 7 ‐2]]
u, s, vh = np.linalg.svd(a, full_matrices=false)
print(u.shape) # (2, 2)
print(u)
# [[‐0.9486833 ‐0.31622777]
# [‐0.31622777 0.9486833 ]]
print(s.shape) # (2,)
print(np.diag(s))
# [[18.97366596 0. ]
# [ 0. 9.48683298]]
print(vh.shape) # (2, 3)
print(vh)
# [[‐0.33333333 ‐0.66666667 ‐0.66666667]
# [ 0.66666667 0.33333333 ‐0.66666667]]
a = np.dot(u, np.diag(s))
a = np.dot(a, vh)
print(a)
# [[ 4. 11. 14.]
# [ 8. 7. ‐2.]]
q,r = numpy.linalg.qr(a, mode='reduced') 計算矩陣 a 的qr分解。
a 是乙個(m, n)的待分解矩陣。
mode = reduced :返回(m, n)的列向量兩兩正交的矩陣 q ,和(n, n)的三角陣
r (reduced qr分解)。
mode = complete :返回(m, m)的正交矩陣 q ,和(m, n)的三角陣 r (full qr分解)。
import numpy as np
a = np.array([[2, ‐2, 3], [1, 1, 1], [1, 3, ‐1]])
print(a)
# [[ 2 ‐2 3]
# [ 1 1 1]
# [ 1 3 ‐1]]
q, r = np.linalg.qr(a)
print(q.shape) # (3, 3)
print(q)
# [[‐0.81649658 0.53452248 0.21821789]
# [‐0.40824829 ‐0.26726124 ‐0.87287156]
# [‐0.40824829 ‐0.80178373 0.43643578]]
print(r.shape) # (3, 3)
print(r)
# [[‐2.44948974 0. ‐2.44948974]
# [ 0. ‐3.74165739 2.13808994]
# [ 0. 0. ‐0.65465367]]
print(np.dot(q, r))
# [[ 2. ‐2. 3.]
# [ 1. 1. 1.]
# [ 1. 3. ‐1.]]
a = np.allclose(np.dot(q.t, q), np.eye(3))
print(a) # true
l = numpy.linalg.cholesky(a) 返回正定矩陣 a 的 cholesky 分解 a = l*l.t ,其中 l 是下三角。
import numpy as np
a = np.array([[1, 1, 1, 1], [1, 3, 3, 3],
[1, 3, 5, 5], [1, 3, 5, 7]])
print(a)
# [[1 1 1 1]
# [1 3 3 3]
# [1 3 5 5]
# [1 3 5 7]]
print(np.linalg.ei**als(a))
# [13.13707118 1.6199144 0.51978306 0.72323135]
l = np.linalg.cholesky(a)
print(l)
# [[1. 0. 0. 0. ]
# [1. 1.41421356 0. 0. ]
# [1. 1.41421356 1.41421356 0. ]
# [1. 1.41421356 1.41421356 1.41421356]]
print(np.dot(l, l.t))
# [[1. 1. 1. 1.]
# [1. 3. 3. 3.]
# [1. 3. 5. 5.]
# [1. 3. 5. 7.]]
numpy.linalg.norm(x, ord=none, axis=none, keepdims=false) 計算向量或者矩陣的範數。 根據 ord 引數的不同,計算不同的範數: 【
numpy.linalg.det(a) 計算行列式。
numpy.linalg.matrix_rank(m, tol=none, hermitian=false) 返回矩陣的秩。
numpy.trace(a, offset=0, axis1=0, axis2=1, dtype=none, out=none) 方陣的跡就是主對角元素 之和。
設 a 是數域上的乙個 n 階矩陣,若在相同數域上存在另乙個 n 階矩陣 b,使得: ab=ba=e (e 為單 位矩陣),則我們稱 b 是 a 的逆矩陣,而 a 則被稱為可逆矩陣。
numpy.linalg.inv(a)
求解線性方程組 numpy.linalg.solve(a, b) 求解線性方程組或矩陣方程。
python的numpy庫結構 Numpy庫簡介
今天給大家分享乙個資料分析處理資料的常見的庫 numpy。這個庫是 python 資料分析的基礎,它提供的資料結構比 python 自身的更高效。我們知道 python 有自帶的列表資料結構。numpy 庫和 list 列表有什麼區別呢?python list 列表儲存的是物件的指標,比如 0,1,...
Python的numpy庫中的shape用法
shape函式是numpy.core.fromnumeric中的函式,它的功能是讀取矩陣的維度。例 shape matrixa 返回matrixa的 行數,列數 元組 shape matrixa 0 行數 shape matrixa 1 列數 shape的輸入引數可以使乙個實數,乙個一維列表 陣列 ...
Python中numpy庫unique函式解析
a np.unique a 對於一維陣列或者列表,unique函式去除其中重複的元素,並按元素由大到小返回乙個新的無元素重複的元組或者列表。import numpy as np a 1,2,2,5,3,4,3 a np.unique a b 1,2,2,5,3,4,3 b np.unique b c...