python 中矩陣運算主要使用numpy庫。numpy的主要物件是同種元素的多維陣列。這是乙個所有的元素都是一種型別、通過乙個正整數索引的元素**(通常是元素是數字)。因此對於隨機查詢來說,比python自帶的list快很多。
在numpy裡面通常使用兩個變數:array和matrix。其實python標準類庫中也有array,但是它的功能相對numpy的少很多,所以不用。matrix是array的分支,matrix可以看做二維的array,array可以是多維,matrix和array在很多時候都是通用的。官方建議如果兩個都可以用,那就選擇array,因為array更靈活,速度更快,很多人把二維的array也翻譯成矩陣。但是matrix的優勢在於,它相對於array使用的符號更簡潔一些。
a = np.array([2,4,5,6,7])
如上建立了乙個1*5的一行5列的array,這就相當於乙個行向量(實際上不是,應該用np.array([[2,4,5,6,7]])建立)。
m = np.matrix([[1,2,4,5,6],[5,6,8,9,4]])
如上建立了乙個2*5的matrix,這就是乙個2*5的矩陣。
另外矩陣還可以通過這個建立:
m = np.mat([[1,2,4,5,6],[5,6,8,9,4]])
mat和matrix的相關之處是,mat()就等同於matrix(,copy=false),而matrix()實際上預設copy=true。
所以如果想引用乙個矩陣,如m,可以使用a = mat(m),或者a = matrix(m,copy=false)。當然用列表來新建立乙個矩陣的時候它們是完全一樣的。
m = m.transpose()
m = m.t
matrix和除一維外的array(甚至高維,儘管不清楚轉置機制,但暫時用不上所以先不研究)可以通過這個兩個進行轉置(t和transpose不同點暫時不研究了)。
但是一維的array,它不是矩陣,也不是向量,所以不能通過transpose來轉置。
因為在計算機裡,二維和一維定義好以後就確定下來用幾個索引標誌來索引了。
而向量從功能上來看,應該被看做1行或1列的矩陣,所以它應該是二維的。就是說我們索引它的某個元素,比如行向量a的第3個元素,我們應該用a[1][3],而不是a[3]。
所以a = np.array([2,4,5,6,7])建立的其實啥也不是,像np.array([[2,4,5,6,7]])這樣建立二維的才算真正意義上的行向量,也就能用transpose()來轉置了。
如果用a = np.array([2,4,5,6,7,1,3,8])建立了一行陣列a,想變成向量,就用reshape()函式來將它變成二維的向量。
a = a.reshape([1,8])
把a轉換為了二維的1行8列的行向量,即使a原來是一維陣列。
a = a.reshape(8)
這樣就又轉回了原來一維的8元素的陣列。
甚至還可以a = a.reshape([2,2,2])
變成了2*2*2的三維的立方陣。
另外,如果賦值給乙個新變數:
b = a.reshape([2,2,2])
a的shape沒變,b是2*2*2的立方陣,而且它們共享記憶體,即a改變它的元素值,b也會改變。
乘法有三種表達方式:*、dot()、multiply()
陣列或矩陣的對應位置元素相乘。
對於一維陣列array,執行對應位置相乘,然後再求和;對於秩不為1的二維陣列(array)、矩陣(matrix),執行矩陣乘法運算(超過二維的可以參考numpy庫介紹)
對陣列array執行對應位置元素相乘(相當於 np.multiply() 函式),對矩陣matrix執行矩陣乘法運算(相當於 np.dot() 函式)。就是multiply()和dot()的融合。
相當於多個array或matrix執行*,即a**3=a*a*a。
multiply()全都是對應元素相乘;dot()是矩陣乘法,而一維array是對應元素相乘後之和;*對array是對應元素相乘,對matrix是矩陣乘法。
相對來說matrix注重矩陣操作,array注重陣列操作(陣中元素對應進行運算)
Python 矩陣相關
python 中矩陣運算主要使用numpy庫。numpy的主要物件是同種元素的多維陣列。這是乙個所有的元素都是一種型別 通過乙個正整數索引的元素 通常是元素是數字 因此對於隨機查詢來說,比python自帶的list快很多。在numpy裡面通常使用兩個變數 array和matrix。其實python標...
矩陣相關總結
有可逆矩陣p,q,使得 paq b 有可逆矩陣p,使得 pap b 求對角矩陣就是求特徵值和特徵向量 有a,b兩個n階方陣,如有非奇異n階方陣c,使得b c tac a ta e,a t a u hau t或者 a utu h u h在實數域上就是指轉置 lambda a i preceq a pr...
矩陣運算相關問題
hoj1575 1 問題 給定乙個n n的方陣 2 n 10 計算這個矩陣的k次方的跡 2 k 1000000000 模9973 2 要點 無 hoj4920 1 問題 給定兩個n n矩陣 1 n 800 計算這兩個矩陣的乘積,模3 2 要點 將初始矩陣模3之後會有比較多的0元素,有利於提供矩陣的乘...