成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

機器學(xué)習(xí)數(shù)學(xué)基礎(chǔ)之線代篇——線性代數(shù)python手冊(建議收藏)

andot / 3681人閱讀

摘要:提到線性代數(shù),又不得不吐槽國內(nèi)教材了,學(xué)起來真的是實力勸退。線性代數(shù)概念較多,計劃在另一篇總結(jié)基本概念,這里僅總結(jié)線性代數(shù)里一些重要概念的程序。

提到線性代數(shù),又不得不吐槽國內(nèi)教材了,學(xué)起來真的是實力勸退。有多少跟著國內(nèi)教材學(xué)完線性代數(shù)課程后,知道線性代數(shù)是什么,它到底是干什么的?

事實上如果你后面想做科研、想研究機器學(xué)習(xí)、深度學(xué)習(xí),你會發(fā)現(xiàn)處處是線性代數(shù)。這么抽象又重要的課程,一本書里基本看不到幾張圖,就好比是沒有注釋的代碼,大概以為我的腦子就是記公式的機器吧…

如果你還未開始學(xué)習(xí)線性代數(shù),那么強烈建議你把學(xué)校發(fā)的紫色教材放在一邊,找?guī)妆緡獾木€性代數(shù)教材看看。然后在B站里搜一下麻省理工公開課Gilbert Strang老爺子的線性代數(shù)視頻,相信你會打開新世界的大門(文末有彩蛋)——


吐槽就到這,我們先來看一個涉及線性代數(shù)本質(zhì)問題的式子:
y = A x y=Ax y=Ax
可以說,線性代數(shù)的很多問題都是從這個式子出發(fā)的。那么在線性代數(shù)中,如何理解這個式子呢?

直觀上看,這個式子跟我們熟悉的一次函數(shù) y = kx比較像。對于y=kx,我們可以理解為將標(biāo)量x經(jīng)過 某種線性變換,得到另一個標(biāo)量y。

這里,我們把x和y換成向量,對于y = Ax,我們可以理解為將矩陣A(線性變換)作用于向量x ,得到另一個向量y。

由于向量就是空間中的一個點,這個種線性變換的作用就是將空間中的一個點變?yōu)榭臻g中的另一個點。

對于函數(shù)y=kx,如果我們知道y和k,就能夠求解出x。對于y=Ax也一樣,如果y和A已知,我們同樣可以求出x,這就是求解線性方程組的問題了。

其他知識點都是從這些基本的概念衍生出來的,這里就不一一列舉了。任何新知識都不是憑空出來的,都是建立在以前的理論基礎(chǔ)之上。在學(xué)習(xí)數(shù)學(xué)的時候,可以多聯(lián)系以前的知識,類比著學(xué)習(xí)。


線性代數(shù)概念較多,計劃在另一篇總結(jié)基本概念,這里僅總結(jié)線性代數(shù)里一些重要概念的python程序。

1 矩陣基本操作

注:向量操作與矩陣類似。

1.1 創(chuàng)建矩陣

(1)通過列表創(chuàng)建矩陣

#通過列表創(chuàng)建矩陣import numpy as npm = [[1,2,3],[4,5,6],[7,8,9]]  a1 = np.array(m)print("a1:",a1)print("a1的大?。? ,a1.shape)print("a1的類型:",type(a1))

(2)通過元組創(chuàng)建矩陣

#通過元組創(chuàng)建矩陣t = ((1,2,3),(4,5,6),(7,8,9)) a2 = np.array(t)print("a2:",t)print("a2的大小:" ,a2.shape)print("a2的類型:",type(a2))

(3)使用random()和randint()函數(shù)

random()函數(shù)隨機生成矩陣中指定范圍的浮點數(shù):

import numpy as npa1 = np.random.random((3,4))  #3×4階,取值范圍為0~1print(a1)

randint()函數(shù)隨機生成矩陣中指定范圍的整數(shù):

a2 = np.random.randint(1,10,size=[3,4])  #3×4階,取值范圍為1~10(不包括10)print(a2)

1.2 改變矩陣的大小

import numpy as npm = [1,2,3,4,5,6,7,8,9,10,11,12]a = np.array(m)a1 = a.reshape(3,4)a2 = a.reshape(4,3)print("原矩陣a: /n",a)print("轉(zhuǎn)換為3行4列矩陣a1:/n",a1)print("轉(zhuǎn)換為4行3列矩陣a2:/n",a2)

1.3 獲取矩陣元素

print("a2的第0行元素a2[0]: /n",a2[0])print("a2的前2行元素a2[0:2]: /n",a2[0:2])print("a2的第0行和第2行元素a2[[0,2]]: /n",a2[[0,2]])print("a2的第0列元素a2[:,1]: /n",a2[:,1])print("a2的前2行元素a2[:,0:2]: /n",a2[:,0:2])print("a2的第0列和第2列元素a2[:,[0,2]]: /n",a2[:,[0,2]])print("a2的第2行第2列元素a2[2,2]: /n",a2[2,2])

1.4 特殊矩陣生成

(1)單位矩陣

import numpy as npe1 = np.eye(5)e2 = np.identity(5)print("通過eye()創(chuàng)建五階單位矩陣e1: /n",e1)print("通過identity()創(chuàng)建五階單位矩陣e2: /n",e2)

(2)零矩陣

import numpy as npa = np.zeros((3,4))  print("3×4階零矩陣a: /n",a)

(3)對角矩陣

import numpy as npm = [1,2,3,4,5]a = np.diag(m)print("創(chuàng)建對角線為1,2,3,4,5的對角矩陣: /n",a)

(4)上三角矩陣和下三角矩陣

import numpy as npm = [[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4]]a = np.array(m)a1 = np.triu(a,0)a2 = np.tril(a,0)print("a矩陣:/n",a)print("a矩陣的上三角矩陣: /n",a1)print("a矩陣的下三角矩陣: /n",a2)

1.5 矩陣運算

(1)矩陣加減法運算

import numpy as npm1 = [[1,1,1],[2,2,2]]m2 = [[3,3,3],[4,4,4]]a1 = np.array(m1)a2 = np.array(m2)print("a1 + a2 = /n",a1 + a2)print("a1 - a2 = /n",a1 - a2)

(2)矩陣數(shù)乘運算

import numpy as npm = [[5,5,5],[6,6,6]]a = np.array(m)print("矩陣數(shù)乘2a = /n",2*a)

(3)矩陣乘法運算

import numpy as npa1 = np.array([[1,1,1],[2,2,2],[3,3,3]])a2 = np.array([[4,4,4],[5,5,5],[6,6,6]])a3 = np.dot(a1,a2)a4 = a1.dot(a2)a5 = a1*a2a6 = np.multiply(a1,a2)print("矩陣乘法a1×a2 = /n",a3)print("矩陣乘法a1×a2 = /n",a4)print("對應(yīng)元素的乘積: /n",a5)print("對應(yīng)元素的乘積: /n",a6)

(4)矩陣乘方運算

import numpy as npm = [[1,1,1],[2,2,2],[3,3,3]]a = np.array(m)a1 = a**2print("a的二次方a1: /n",a1)

(5)生成逆矩陣

import numpy as npm = [[2,5],[2,3]]a = np.array(m)a1 = np.linalg.inv(a)a2 = np.mat(a)a3 = a2.Iprint("使用np.linalg.inv()求a的逆矩陣a1: /n",a1)print("使用I屬性求a的逆矩陣a3: /n",a3)

(6)生成轉(zhuǎn)置矩陣

import numpy as npm = [[1,2,3],[4,5,6]]a = np.array(m)a1 = a.Ta2 = np.transpose(a)print("使用T屬性求a的轉(zhuǎn)置a1: /n",a1)print("使用np.transpose()函數(shù)求a的轉(zhuǎn)置a2: /n",a2)

2 行列式

2.1 行列式與矩陣的區(qū)別

(1)行列式是一個數(shù)值,矩陣是一個數(shù)表;

(2)行列式的行數(shù)等于列數(shù),矩陣的行數(shù)不等于列數(shù)。

2.2 計算行列式

(1)使用np.linalg.det()函數(shù)計算行列式

官方手冊用法:

python程序:

#計算行列式dimport numpy as npd = [[1, 2, -4],[-2, 2, 1],[-3, 4, -2]]a = np.array(d)result = np.linalg.det(a)  print(result)  #-14.000000000000004

(2)使用scipy.linalg.det()函數(shù)計算行列式

官方手冊用法:

python程序:

# 計算行列式dfrom scipy import linalgd = [[1, 2, -4],[-2, 2, 1],[-3, 4, -2]]a = np.array(d)linalg.det(a)

2.3 計算矩陣的秩

使用np.linalg.matrix_rank() 函數(shù)計算矩陣的秩。

官方手冊用法:

python程序:

# 計算矩陣d的秩import numpy as npm = [[2, -1, -1, 1, 2],[1, 1, -2, 1, 4],[4, -6, 2, -2, 4],[3, 6, -9, 7, 9]]a = np.array(m)rank = np.linalg.matrix_rank(m)print(rank) #3

3 向量基本運算

3.1 向量的內(nèi)積

python程序:

# 計算向量v1與向量v2的內(nèi)積import numpy as npv1 = [[1,1,1]]v2 = [[1,-2,1]]a1 = np.array(v1).reshape(3,1)a2 = np.array(v2).reshape(3,1)result = a1.T.dot(a2)print(result) #[[0]]

3.2 向量的長度

使用np.linalg.norm()函數(shù):

官方手冊用法:

python程序:

# 計算向量v的長度import numpy as np v = [[1,2,2]]a = np.array(v)result =np.linalg.norm(a)print(result) #3

4 計算線性方程組的解

(1)使用np.linalg.solve()函數(shù)

官方手冊用法:

注意:這里系數(shù)矩陣必須是滿秩,即所有行必須是線性無關(guān)的。

python程序:

#計算線性方程組的解import numpy as np l1 = [[3, 2, -3],[2, -3, 3],[1, -1, 2]]l2 = [[-2, 5, 5]]a1 = np.array(l1)a2 = np.array(l2).reshape(3,1)result = np.linalg.solve(a1,a2)print(result)

(2)使用scipy.linalg.solve()函數(shù)

官方手冊用法(內(nèi)容有點長):

https://docs.scipy.org/doc/scipy/reference/reference/generated/scipy.linalg.solve.html#scipy.linalg.solve

python程序:

#計算線性方程組的解from scipy import linalgl1 = [[3, 2, -3],[2, -3, 3],[1, -1, 2]]l2 = [[-2, 5, 5]]a1 = np.array(l1)a2 = np.array(l2).reshape(3,1)result = linalg.solve(a1,a2)print(result)

5 特征值與特征向量

5.1 計算特征值與特征向量

使用np.linalg.eig()函數(shù):

官方手冊用法:

python程序:

# 計算特征值和特征向量import numpy as npm = [[3,-1],[-1,3]]a = np.array(m)eig_val,eig_vex = np.linalg.eig(a)print(eig_val) print(eig_vex) 

輸出

特征值:  [4. 2.]特征向量: [[ 0.70710678  0.70710678] [-0.70710678  0.70710678]]

5.2 特征值分解

特征值分解要求帶分解的矩陣必須是n維方陣。

python程序:

import numpy as npm1 = [[-2, 1, 1],[0, 2, 0],[-4, 1, 3]]  #m1為原始矩陣a = np.array(m1)eig_val,eig_vex = np.linalg.eig(a)print("特征值為:",eig_val)eig_val_diag = np.diag(eig_val) #特征值對角化print("對角矩陣:",eig_val_diag)m2 = eig_vex.dot(eig_val_diag.dot(np.linalg.inv(eig_vex))) #m2為新生成的矩陣print(m2)print("m1和m2是否相等:",np.allclose(m1,m2))

6 SVD

6.1 SVD要點

SVD(Singular Value Decompostion)可以對任意矩陣進(jìn)行分解,它是一種抽取重要特征的方法,將一個復(fù)雜的大矩陣用三個小矩陣來表示,而這三個小矩陣包含大矩陣的重要特征信息。

6.2 使用SVD重構(gòu)矩陣

python程序:

#奇異值分解import numpy as npm1 = [[1, 2, 2, 1],[2, 1, -2, -2],[1, -1, -4, -3]] # 原矩陣m1a = np.array(m1)u,s,vt = np.linalg.svd(a) diagma = np.zeros(np.shape(a))diagma[:len(s),:len(s)] = np.diag(s)print("左奇異值矩陣: /n",u) print("奇異值: /n",s)print("右奇異值矩陣: /n",vt)print("奇異值矩陣: /n",diagma)m2 = u.dot(diagma.dot(vt)) # 重構(gòu)后的矩陣m2print("原矩陣m1與重構(gòu)后矩陣m2是否相同:",np.allclose(m1,m2)) #判斷重構(gòu)后矩陣與原矩陣是否相等

輸出:

左奇異值矩陣:  [[-0.34819307 -0.73853115  0.57735027] [ 0.4654902  -0.67080962 -0.57735027] [ 0.81368327  0.06772153  0.57735027]]奇異值:  [6.38092733e+00 3.04692736e+00 1.50350788e-16]右奇異值矩陣:  [[ 0.21885073 -0.16370335 -0.76510817 -0.58302235] [-0.66047812 -0.72715663 -0.13335703  0.13125468] [ 0.28819959 -0.02107189 -0.52371947  0.80138311] [-0.65788602  0.66633357 -0.35006188  0.02534264]]奇異值矩陣:  [[6.38092733e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] [0.00000000e+00 3.04692736e+00 0.00000000e+00 0.00000000e+00] [0.00000000e+00 0.00000000e+00 1.50350788e-16 0.00000000e+00]]原矩陣m1與重構(gòu)后矩陣m2是否相同: True

6.3 使用SVD進(jìn)行矩陣近似

for k in range(3
                 
               
              

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/119315.html

相關(guān)文章

  • 分享AI有道干貨 | 126 篇 AI 原創(chuàng)文章精選(ML、DL、資源、教程)

    摘要:值得一提的是每篇文章都是我用心整理的,編者一貫堅持使用通俗形象的語言給我的讀者朋友們講解機器學(xué)習(xí)深度學(xué)習(xí)的各個知識點。今天,紅色石頭特此將以前所有的原創(chuàng)文章整理出來,組成一個比較合理完整的機器學(xué)習(xí)深度學(xué)習(xí)的學(xué)習(xí)路線圖,希望能夠幫助到大家。 一年多來,公眾號【AI有道】已經(jīng)發(fā)布了 140+ 的原創(chuàng)文章了。內(nèi)容涉及林軒田機器學(xué)習(xí)課程筆記、吳恩達(dá) deeplearning.ai 課程筆記、機...

    jimhs 評論0 收藏0
  • 學(xué)Python說簡單真的簡單,說難也難,就由過來人給你總結(jié)為什么吧。

    摘要:數(shù)據(jù)科學(xué)其實就是機器學(xué)習(xí),數(shù)據(jù)分析和數(shù)據(jù)可視化。機器學(xué)習(xí)通過實現(xiàn)算法,該算法能夠自動檢測輸入中的模式。一般應(yīng)用于人臉識別語音識別熱門機器學(xué)習(xí)算法包括神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)支持向量機隨機森林進(jìn)行數(shù)據(jù)分析可視化進(jìn)行數(shù)據(jù)可視化時,是非常熱門的庫。 ...

    HtmlCssJs 評論0 收藏0
  • 【DL-CV】【深度學(xué)習(xí)-計算機視覺】系列簡介及入門推薦

    摘要:最后還是強調(diào)一下自學(xué)的重要性,深度學(xué)習(xí)及其分支都是一個大坑,知識量巨大,希望大家充分利用搜索引擎對已學(xué)知識點進(jìn)行補充或解疑,觀摩大佬們的代碼,不要滿足于這小小的系列 【DL-CV】計算機視覺前置了解 showImg(https://segmentfault.com/img/bVbeOwJ?w=1464&h=1000); 閑了就要找事做,不能被四公主和NS誘惑。所以在搞完了爬蟲進(jìn)入假期時...

    Drinkey 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<