python numpy包 矩陣運算

2021-06-25 20:38:08 字數 3081 閱讀 9254

下面簡要介紹python和matlab處理數學問題的幾個不同點。1.matlab的基本是矩陣,而numpy的基本型別是多為陣列,把matrix看做是array的子類。2.matlab的索引從1開始,而numpy從0開始。

1.建立矩陣

a1=np.array([1,2,3],dtype=int)  

#建立乙個一維陣列,資料型別是int。也可以不指定資料型別,使用預設。幾乎所有的陣列建立函式都可以指定資料型別,即dtype的取值。

a2=np.array([[1,2,3],[2,3,4]])  

#建立乙個二維陣列。此處和matlab的二維陣列(矩陣)的建立有很大差別。

同樣,numpy中也有很多內建的特殊矩陣:

b1=np.zeros((2,3))  

#生成乙個2行3列的全0矩陣。注意,引數是乙個tuple:(2,3),所以有兩個括號。完整的形式為:zeros(shape,dtype=)。相同的結構,有ones()建立全1矩陣。empty()建立乙個空矩陣,使用記憶體中的隨機值來填充這個矩陣。

b2=identity(n)  

#建立n*n的單位陣,這只能是乙個方陣。

b3=eye(n,m=none,k=0)  

#建立乙個對角線是1其餘值為0的矩陣,用k指定對角線的位置。m預設none。

此外,numpy中還提供了幾個like函式,即按照某乙個已知的陣列的規模(幾行幾列)建立同樣規模的特殊陣列。這樣的函式有zeros_like()、empty_like()、ones_like(),它們的引數均為如此形式:zeros_like(a,dtype=),其中,a是乙個已知的陣列。

c1=np.arange(2,3,0.1)  

#起點,終點,步長值。含起點值,不含終點值。

c2=np.linspace(1,4,10)  

#起點,終點,區間內點數。起點終點均包括在內。同理,有logspace()函式

d1=np.linalg.companion(a)  

#伴隨矩陣

d2=np.linalg.triu()/tril()  

#作用同matlab中的同名函式

e1=np.random.rand(3,2)  

#產生乙個3行2列的隨機數組。同一空間下,有randn()/randint()等多個隨機函式

fliplr()/flipud()/rot90()  

#功能類似matlab同名函式。

xx=np.roll(x,2)  

#roll()是迴圈移位函式。此呼叫表示向右迴圈移動2位。

2.陣列的特徵資訊

先假設已經存在乙個n維陣列x了,那麼可以得到x的一些屬性,這些屬性可以在輸入x和乙個.之後,按tab鍵檢視提示。這裡明顯看到了python物件導向的特徵。

x.flags  

#陣列的儲存情況資訊。

x.shape  

#結果是乙個tuple,返回本陣列的行數、列數、……

x.ndim  

#陣列的維數,結果是乙個數

x.size  

#陣列中元素的數量

x.itemsize  

#陣列中的資料項的所佔記憶體空間大小

x.dtype  

#資料型別

x.t  

#如果x是矩陣,發揮的是x的轉置矩陣

x.trace()  

#計算x的跡

np.linalg.det(a)  

#返回的是矩陣a的行列式

np.linalg.norm(a,ord=none)  

#計算矩陣a的範數

np.linalg.eig(a)  

#矩陣a的特徵值和特徵向量

np.linalg.cond(a,p=none)  

#矩陣a的條件數

np.linalg.inv(a)  

#矩陣a的逆矩陣

3.矩陣分解

常見的矩陣分解函式,numpy.linalg均已經提供。比如cholesky()/qr()/svd()/lu()/schur()等。某些

演算法為了方便計算或者針對不同的特殊情況,還給出了多種呼叫形式,以便得到最佳結果。

4.矩陣運算

np.dot(a,b)用來計算陣列的點積;vdot(a,b)專門計算向量的點積,和dot()的區別在於對complex資料型別的處理不一樣;innner(a,b)用來計算內積;outer(a,b)計算外積。

專門處理矩陣的數學函式在numpy的子包linalg中定義。比如np.linalg.logm(a)計算矩陣a的對數。可見,這個處理和matlab是類似的,使用乙個m字尾表示是矩陣的運算。在這個空間內可以使用的有cosm()/sinm()/signm()/sqrtm()等。其中常規exp()對應有三種矩陣形式:expm()使用pade近似演算法、expm2()使用特徵值分析演算法、expm3()使用泰勒級數演算法。在numpy中,也有乙個計算矩陣的函式:funm(a,func)。

5.索引

numpy中的陣列索引形式和python是一致的。如:

x=np.arange(10)

print x[2]  

#單個元素,從前往後正向索引。注意下標是從0開始的。

print x[-2]  

#從後往前索引。最後乙個元素的下標是-1

print x[2:5]  

#多個元素,左閉右開,預設步長值是1

print x[:-7]  

#多個元素,從後向前,制定了結束的位置,使用預設步長值

print x[1:7:2]  

#指定步長值

x.shape=(2,5)  

#x的shape屬性被重新賦值,要求就是元素個數不變。2*5=10

print x[1,3]  

#二維陣列索引單個元素,第2行第4列的那個元素

print x[0]  

#第一行所有的元素

y=np.arange(35).reshape(5,7)  

#reshape()函式用於改變陣列的維度

print y[1:5:2,::2]  

#選擇二維陣列中的某些符合條件的元素

python numpy 矩陣堆疊

在實際操作中,遇到了矩陣堆疊的操作,本來想著自己寫乙個函式,後來想,應該有庫函式,於是一陣找尋 import numpy as np a np.array 1,2,3 b np.array 4,5,6 np.stack a,b 預設行堆疊 輸出 array 1,2,3 4,5,6 np.vstack...

python numpy 矩陣運算

轉置np.transpose x 乘np.dot x,y a.dot b dot c 逆np.linalg.inv x 轉為1維 a.flatten 除 就是乘矩陣的逆a b a.dot np.linalg.inv b 刪除一列axis 1 行axis 0 np.delete t1,j,axis 0...

Python numpy的矩陣計算

import numpy as np def numpywork1 矩陣的求和運算 one np.array 1,0,1,3,4,1 2,1,4,2,3,0 3,5,4,1,3,2 2,6,3,1,3,8 9,1,2,1,5,0 two np.sum one,axis 0 每一列求和,得到的新矩陣 ...