python的list與numpy的array和matrix的關係
python在做資料分析之所以會這麼好用,就是因為他有一大堆好用的package可以用,例如今天會用到的NumPy。它是非常常用的一個package,而在以python使用OpenCV時更是不能沒有它,因為OpenCV在python的版本中的Mat就是用NumPy的array的,並無一個class叫做Mat。不過他最常被用到的當然還是數學的運算。
用電腦在做數學運算時,最常用到的就是矩陣的運算了,但file io也好,網路io也好,通常都是用string(或是你要說char也好,不過python沒有char),而在python來說,許多處理string的函數回傳的都是list,所以要怎麼將list轉變成我們可以用的array或是matrix就格外的重要了。這邊直接就先講了,當要做矩陣運算的時候,請轉成matrix,接著再做剩下一切的運算
在開始之前,稍微複習一下,甚麼是array(陣列)、vector(向量)跟matrix(矩陣),不然等會array跟matrix會傻傻分不清楚。array是一堆資料,可能是各種維度的,一維的array稱之為vector,二維的array稱之為matrix。它們倆最大的不同是在,當你做array operation的時候是針對每一個元素,而當你做matrix operation的時候你做的是矩陣的運算,稍後會提到。而array跟matrix在Numpy都是一種class,都有建構式是可以直接把list轉成該型態的。
以下兩段程式碼是list轉成array和matrix的範例,以及一些要注意的地方
list與NumPy的array
好了,今天的筆記到此結束
希望有幫助未來遺忘這些的自己,以及需要的人
用電腦在做數學運算時,最常用到的就是矩陣的運算了,但file io也好,網路io也好,通常都是用string(或是你要說char也好,不過python沒有char),而在python來說,許多處理string的函數回傳的都是list,所以要怎麼將list轉變成我們可以用的array或是matrix就格外的重要了。這邊直接就先講了,當要做矩陣運算的時候,請轉成matrix,接著再做剩下一切的運算
在開始之前,稍微複習一下,甚麼是array(陣列)、vector(向量)跟matrix(矩陣),不然等會array跟matrix會傻傻分不清楚。array是一堆資料,可能是各種維度的,一維的array稱之為vector,二維的array稱之為matrix。它們倆最大的不同是在,當你做array operation的時候是針對每一個元素,而當你做matrix operation的時候你做的是矩陣的運算,稍後會提到。而array跟matrix在Numpy都是一種class,都有建構式是可以直接把list轉成該型態的。
以下兩段程式碼是list轉成array和matrix的範例,以及一些要注意的地方
list與NumPy的array
import numpy as np a = [1,2,3] b = [[1,2,3],[4,5,6]] c = np.array(a) d = np.array(b) print(a) #[1, 2, 3] print(b) #[[1, 2, 3], [4, 5, 6]] print(c) #[1 2 3] print(d) #[[1 2 3] # [4 5 6]] print(d.tolist()) #[[1, 2, 3], [4, 5, 6]] print(c.T) #[1 2 3] print(a*3) #[1, 2, 3, 1, 2, 3, 1, 2, 3] print(c*3) #[3, 6, 9] print(d*c.T) #[[1 4 9] # [4 10 18]]
兩個重點
一是當維度是一的時候,array是一維陣列,所以轉置等於沒變(仍是一維)
二是array operation做的都是針對陣列中元素的處理,像是matlab裡面加上點(.)的運算
所以我們可以看到像是d*c.T的這種運算結果
一是當維度是一的時候,array是一維陣列,所以轉置等於沒變(仍是一維)
二是array operation做的都是針對陣列中元素的處理,像是matlab裡面加上點(.)的運算
所以我們可以看到像是d*c.T的這種運算結果
list與NumPy的matrix
import numpy as np a = [1,2,3] b = [[1,2,3],[4,5,6]] c = np.matrix(a) d = np.matrix(b) print(a) #[1, 2, 3] print(b) #[[1, 2, 3], [4, 5, 6]] print(c) #[[1 2 3]] print(d) #[[1 2 3] # [4 5 6]] print(d.tolist()) #[[1, 2, 3], [4, 5, 6]] print(c.T) #[[1] # [2] # [3]] print(c*3) #[[3, 6, 9]] print(d*c.T) #[[14] # [32]] c*3= [[3, 6, 9]] d*c.T= [[14] [32]]
這邊相對就沒什麼重點
就都是我們熟悉的矩陣運算
而且是以我們平常寫在紙上的那種行列方向來呈現
所以數學上沒意外的話 就都用matrix吧
下面提供幾個常用的矩陣數學運算
常用的矩陣數學運算
就都是我們熟悉的矩陣運算
而且是以我們平常寫在紙上的那種行列方向來呈現
所以數學上沒意外的話 就都用matrix吧
下面提供幾個常用的矩陣數學運算
常用的矩陣數學運算
import numpy as np a = [[1,2],[3,4]] b = [[1,1],[1,1]] c = np.matrix(a) d = np.matrix(b) print(c) #[[1 2] # [3 4]] print(d) #[[1 1] # [1 1]] print(c.T) #[[1 3] # [2 4]] print(np.linalg.inv(c)) #[[-2. 1. ] # [ 1.5 -0.5]] print(c*3) #[[ 3 6] # [ 9 12]] print(c+d) #[[2 3] # [4 5]] print(c*d) #[[3 3] # [7 7]]
希望有幫助未來遺忘這些的自己,以及需要的人
留言
張貼留言