国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

andot / 3672人閱讀

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

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

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

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


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

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

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

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

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

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


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

1 矩陣基本操作

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

1.1 創(chuàng)建矩陣

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

#通過(guò)列表創(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)通過(guò)元組創(chuàng)建矩陣

#通過(guò)元組創(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ù)隨機(jī)生成矩陣中指定范圍的浮點(diǎn)數(shù):

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

randint()函數(shù)隨機(jī)生成矩陣中指定范圍的整數(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("通過(guò)eye()創(chuàng)建五階單位矩陣e1: /n",e1)print("通過(guò)identity()創(chuàng)建五階單位矩陣e2: /n",e2)

(2)零矩陣

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

(3)對(duì)角矩陣

import numpy as npm = [1,2,3,4,5]a = np.diag(m)print("創(chuàng)建對(duì)角線為1,2,3,4,5的對(duì)角矩陣: /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 矩陣運(yùn)算

(1)矩陣加減法運(yùn)算

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ù)乘運(yùn)算

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

(3)矩陣乘法運(yùn)算

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("對(duì)應(yīng)元素的乘積: /n",a5)print("對(duì)應(yīng)元素的乘積: /n",a6)

(4)矩陣乘方運(yùn)算

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)行列式是一個(gè)數(shù)值,矩陣是一個(gè)數(shù)表;

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

2.2 計(jì)算行列式

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

官方手冊(cè)用法:

python程序:

#計(jì)算行列式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ù)計(jì)算行列式

官方手冊(cè)用法:

python程序:

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

2.3 計(jì)算矩陣的秩

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

官方手冊(cè)用法:

python程序:

# 計(jì)算矩陣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 向量基本運(yùn)算

3.1 向量的內(nèi)積

python程序:

# 計(jì)算向量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 向量的長(zhǎng)度

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

官方手冊(cè)用法:

python程序:

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

4 計(jì)算線性方程組的解

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

官方手冊(cè)用法:

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

python程序:

#計(jì)算線性方程組的解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ù)

官方手冊(cè)用法(內(nèi)容有點(diǎn)長(zhǎng)):

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

python程序:

#計(jì)算線性方程組的解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 計(jì)算特征值與特征向量

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

官方手冊(cè)用法:

python程序:

# 計(jì)算特征值和特征向量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) #特征值對(duì)角化print("對(duì)角矩陣:",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要點(diǎn)

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

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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/119315.html

相關(guān)文章

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

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

    jimhs 評(píng)論0 收藏0
  • 學(xué)Python說(shuō)簡(jiǎn)單真的簡(jiǎn)單,說(shuō)難也難,就由過(guò)來(lái)人給你總結(jié)為什么吧。

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

    HtmlCssJs 評(píng)論0 收藏0
  • 【DL-CV】【深度學(xué)習(xí)-計(jì)算機(jī)視覺(jué)】系列簡(jiǎn)介及入門(mén)推薦

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

    Drinkey 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<