Python學習之數組類型一:


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獲取數組的維度  例如(23)表示二行三列矩陣

print(len(shape(T)))

③ A=ones((2,3))    #生成的是由1填充的23列的矩陣

print(A)

④ T=random.rand(3,3)    #random.rand(n,m) 生成由(01)中平均分布的隨機數(填充)構成的nm列矩陣

print(T)

⑤ A=arange(3)      #arange(n)返回元素為前n個整數的向量

print(A)

⑥ v=linspace(1,2,4)    #linspace(a,b,n)生成由平均分布在ab之間的n個點組成的向量

print(v)

⑦ I=identityn)     #生成階數為n的單位矩陣

  1. 訪問和修改數組形狀

訪問:用reshape函數或者數組屬性shape 來訪問

數組的形狀是元組,例如n*m的矩陣的形狀是元組(nm

矩陣:shapeA)  #返回矩陣的形狀(n,m

向量:shapev)   #返回(n, )  注意:向量形狀是包含向量長度n的單元素元組

修改數組形狀:是指在不復制數據的情況下給出數組的新視圖。

  1. 重塑reshape()函數    

例如:

v=array([0,1,2,3,4,5])

M=v.reshape(2,3)     #reshape()函數在不復制數據的情況下給出了一個數組的新視圖

#將向量v生成一個二行三列的矩陣

print(M)

print(shape(M))   #返回(23

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))     #返回(24)兩行四列的矩陣

print(M)

M=v.reshape(-1,2)

print(shape(M))    #返回形狀(42)的矩陣

print(M)

M=v.reshape(3,-1)    #如果嘗試不與初識形狀值相乘的形狀的數組,則返回錯誤

print(shape(M))

  1. 轉置  矩陣轉置與向量有所區別:

 例如: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))        #將符號變化的向量的前半部分和后半部分進行交換

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM