一、建立矩陣
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....