Python學習之數組類型一:
Numpy中的向量與矩陣:
1.創建: 向量、矩陣均由array函數創建,區別在於向量是v=array( [逗號分隔的元素] ),
矩陣是M=array( [[ ]] ) 注意矩陣是雙方括號
向量可以執行基本的線性代數運算(運算是基於元素的運算),例如標量乘法/除法、線性組合、范數、標量積等。
2.訪問數組項: 向量索引與切片類似於字符串與列表
通過索引訪問矩陣(數組項),需要兩個索引來訪問,這些索引都在一對方栝號里。 例如:M[2:4,1:4] 表示行與列的切片
一些切片原則:
矩陣[index,index] 得到維數為0的標量
矩陣[索引,切片]或者[切片,索引] 得到維數為1的向量
矩陣[切片,切片] 得到維數為2的矩陣
使用切片修改(替換)矩陣中的一個元素,一整行,整個子矩陣。
3.數組構造函數:----用於一些構造數組的命令生成特殊的矩陣。
v=array([3.,5.,8.])
① I=diag(v,0) #diag(v,k) 生成的結果是來自向量V的對角n階方陣,前k列元素均為零
print(I)
② T=zeros((2,2,3)) #張量T(向量、矩陣或更高階張量)的函數ndim給出的維數總是等於其形狀的長度
print(T)
print(ndim(T)) #使用數組屬性T.ndim或者函數numpy.nidm 來獲取數組的維數
print(shape(T)) #數組屬性:shape獲取數組的維度 例如(2,3)表示二行三列矩陣
print(len(shape(T)))
③ A=ones((2,3)) #生成的是由1填充的2行3列的矩陣
print(A)
④ T=random.rand(3,3) #random.rand(n,m) 生成由(0,1)中平均分布的隨機數(填充)構成的n行m列矩陣
print(T)
⑤ A=arange(3) #arange(n)返回元素為前n個整數的向量
print(A)
⑥ v=linspace(1,2,4) #linspace(a,b,n)生成由平均分布在a與b之間的n個點組成的向量
print(v)
⑦ I=identity(n) #生成階數為n的單位矩陣
- 訪問和修改數組形狀
訪問:用reshape函數或者數組屬性shape 來訪問
數組的形狀是元組,例如n*m的矩陣的形狀是元組(n,m)
矩陣:shape(A) #返回矩陣的形狀(n,m)
向量:shape(v) #返回(n, ) 注意:向量形狀是包含向量長度n的單元素元組
修改數組形狀:是指在不復制數據的情況下給出數組的新視圖。
- 重塑:reshape()函數
例如:
v=array([0,1,2,3,4,5])
M=v.reshape(2,3) #reshape()函數在不復制數據的情況下給出了一個數組的新視圖
#將向量v生成一個二行三列的矩陣
print(M)
print(shape(M)) #返回(2,3)
M[0,0]=10
print(v) #v=[10,1,2,3,4,5]現在的v[0]是10 注意:更改M中的M中的一個元素導致v
#中相應的元素自動地發生變化。
v=array([1,2,3,4,5,6,7,8])
M=v.reshape(2,-1) #僅指定一個形狀也很方便,並讓python以與原始形狀相乘的方式來確定另一個形狀參數
#通過設置自由形狀參數-1來實現
print(shape(M)) #返回(2,4)兩行四列的矩陣
print(M)
M=v.reshape(-1,2)
print(shape(M)) #返回形狀(4,2)的矩陣
print(M)
M=v.reshape(3,-1) #如果嘗試不與初識形狀值相乘的形狀的數組,則返回錯誤
print(shape(M))
- 轉置 矩陣轉置與向量有所區別:
例如:A = array([[1.,2.],[3.,4.]])
B=A.T #轉置矩陣用 矩陣.T即(A.T)來切換矩陣的兩個形狀元素
print(A)
print(B)
A[1,1]=5.
print(B[1,1]) #返回5
注意:v.T返回相同的向量
v=array([1.,2.,3.]) #轉置向量,使用---向量.reshape()---來實現
print(v.T)
print(v.reshape(1,-1)) #v的行向量
print(v.reshape(-1,1)) #返回v的列向量
2.疊加:
#疊加 concatennate()方法
a1=array([[1.,2.,3.],[4.,5.,6.]])
a2=array([[0.,1.,3.],[7.,8.,9.]])
A=concatenate((a1,a2),axis=1) #構造矩陣的通用方法concatenate((a1,a2,...),axis=0/1)
print(A) #前提是用一對相匹配的子矩陣,axis=0時,子矩陣垂直疊加;axis=1時,子矩陣水平疊加
#假設有一個長度為2n的向量,要對具有偶數個分量的向量執行偶排列
v=array([0,1,2,3,4,5,6,7,8,9])
def symp(v):
n=len(v)//2
return hstack([v[-n:],-v[:n]])
print(symp(v)) #將符號變化的向量的前半部分和后半部分進行交換