利用numpy庫實現基本矩陣運算

2021-09-05 13:03:37 字數 1876 閱讀 7180

一、建立矩陣

numpy庫中有兩種建立矩陣的方法,兩種方法產生的矩陣型別有所不同。第一種方法是matrix方法,產生的是普通矩陣:

>>>import numpy as np #在idle下直接呼叫numpy庫

>>>a=np.matrix([[1,2],[3,4],[5,6]]) #產生乙個3×2的矩陣a

而另一種方法為array方法,產生的是二維陣列:

>>>b=np.array(range(1,7)).reshape(3,2)  #產生乙個三行二列的陣列b
上述兩個方法生成的矩陣型別有所不同,體現在它們的計算上,在介紹運算 的時候我會提及。

接下來介紹幾個numpy內建函式生成一些特殊矩陣:

>>>np.zeros((3,3)) #產生全零3×3方陣

>>>np.identity(3) #生成3×3單位矩陣

>>>np.diag([3,2,1]) #生成對角陣

二、矩陣運算

繼續利用前面產生過的矩陣進行運算

>>> a+a

matrix([[ 2, 4],

[ 6, 8],

[10, 12]])

>>> b+b

array([[ 2, 4],

[ 6, 8],

[10, 12]])

>>> a-b

matrix([[0, 0],

[0, 0],

[0, 0]])

>>> b+a

matrix([[ 2, 4],

[ 6, 8],

[10, 12]])

可以看到矩陣型別在計算中的變化,不過雖然型別不同,但矩陣加減法的值的結果仍相同。接下來計算矩陣乘法,而兩種型別的預設乘法有所不同。當矩陣是array類時,預設乘法為hadamard乘法,即按照矩陣內對應元素的位置相乘;當矩陣是matrix類時,預設乘法為矩陣的乘法,即行×列,列×行。

>>> a*a

traceback (most recent call last):

file "", line 1, in a*a

file "d:\python36_64\lib\site-packages\numpy\matrixlib\defmatrix.py", line 215, in __mul__

return n.dot(self, asmatrix(other))

valueerror: shapes (3,2) and (3,2) not aligned: 2 (dim 1) != 3 (dim 0)

>>> b*b

array([[ 1, 4],

[ 9, 16],

[25, 36]])

可以看到,由於a矩陣為matrix類,無法實現自乘,而b矩陣為array類,遵循hadamard乘法規則實現自乘。若array類矩陣想實現矩陣乘法該怎麼做呢?答案是利用dot()函式。

>>> b.dot(b)

traceback (most recent call last):

file "", line 1, in b.dot(b)

valueerror: shapes (3,2) and (3,2) not aligned: 2 (dim 1) != 3 (dim 0)

b和b使用矩陣乘法,結果顯然報錯。

array類矩陣還可以實現乘冪的形式:

>>> b**4

array([[ 1, 16],

[ 81, 256],

[ 625, 1296]], dtype=int32)

python 矩陣庫 NumPy矩陣庫

numpy 矩陣庫 numpy 包包含乙個 matrix庫numpy.matlib。此模組的函式返回矩陣而不是返回ndarray物件。matlib.empty matlib.empty 函式返回乙個新的矩陣,而不初始化元素。該函式接受以下引數。numpy.matlib.empty shape,dty...

初學資料分析 一 利用numpy實現矩陣標準化

大資料分析中許多情況下需要用到矩陣標準化 使該矩陣每一列的平均值為0,標準差為1 here is the formula x mean std 以上運算是按列進行的,因為通常大資料分析中的矩陣x n m,其中每一行代表乙個資料,而列代表不同的性質,既是n個資料,每個資料有m種性質 應用 假設現在已經...

Python學習 numpy矩陣庫2

匯入numpy和matlib庫 匯入numpy與matlib import numpy as np import numpy.matlib numpy.matlib.zeros 函式,返回乙個矩陣,並且以 1 來填充 a np.matlib.zeros 3,3 print a 輸出結果 0.0.0....