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
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的這種運算結果


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吧
下面提供幾個常用的矩陣數學運算

常用的矩陣數學運算
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]]


好了,今天的筆記到此結束
希望有幫助未來遺忘這些的自己,以及需要的人

留言

這個網誌中的熱門文章