天天看點

輸入5 5矩陣apython_python中數組和矩陣乘法使用方法總結

python中數組和矩陣乘法方法

Matrix是Array的一個小的分支,包含于Array。是以matrix 擁有array的所有特性。

但在數組乘和矩陣乘時,兩者各有不同,如果a和b是兩個matrices,那麼a*b,就是矩陣積

如果a,b是數組的話,則a*b是數組的運算

1.對數組的操作

>>> import numpy as np

>>> a=np.array([[1,2,3],[4,5,6],[7,8,9]])

>>> a

array([[1, 2, 3],

[4, 5, 6],

[7, 8, 9]])

>>> b=a.copy()

>>> b

array([[1, 2, 3],

[4, 5, 6],

[7, 8, 9]])

>>> a+b#多元數組的加減,按對應位置操作

array([[ 2, 4, 6],

[ 8, 10, 12],

[14, 16, 18]])

>>> a*3#多元數組乘常數,則對數組中每一個元素乘該常數

array([[ 3, 6, 9],

[12, 15, 18],

[21, 24, 27]])

>>> np.dot(a,b)#數組的點乘運算通過np.dot(a,b)來實作,相當于矩陣乘

array([[ 30, 36, 42],

[ 66, 81, 96],

[102, 126, 150]])

>>> c=np.array([1,2,3])#構造一行三列的數組

>>> c

array([1, 2, 3])

>>> c*a#c為一行三列,放于數組a之前,則對數組a中每行對應位置相乘

array([[ 1, 4, 9],

[ 4, 10, 18],

[ 7, 16, 27]])

>>> a*c#c為一行三列,放于數組a之後,依舊是對數組a中每行對應位置相乘

array([[ 1, 4, 9],

[ 4, 10, 18],

[ 7, 16, 27]])

>>> #如果想要矩陣運算,則需要np.dot()函數

>>> np.dot(c,a)#c為一行三列,放于數組a之前,按正常矩陣方式運算

array([30, 36, 42])

>>> np.dot(a,c)#c為一行三列,放于數組a之後,相當于矩陣a乘以3行一列的c矩陣,傳回結果值不變,格式為1行3列

array([14, 32, 50])

>>> #将c改為多行一列的形式

>>> d=c.reshape(3,1)

>>> d

array([[1],

[2],

[3]])

>>> #

>>> np.dot(a,d)#值與np.dot(a,c)一緻,但格式以改變為3行1列

array([[14],

[32],

[50]])

>>> a*a#數組使用*的運算其結果屬于數組運算,對應位置元素之間的運算

array([[ 1, 4, 9],

[16, 25, 36],

[49, 64, 81]])

>>> #但是不能更改a,d點乘的位置,不符合矩陣運算格式

>>> np.dot(d,a)

Traceback (most recent call last):

File "", line 1, in

np.dot(d,a)

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

對于數組的轉置,求逆,求迹運算請參考上篇文章

2.對矩陣的操作

>>> a=np.array([[1,2,3],[4,5,6],[7,8,9]])

>>> a=np.mat(a)

>>> a

matrix([[1, 2, 3],

[4, 5, 6],

[7, 8, 9]])

>>> b=a

>>> b

matrix([[1, 2, 3],

[4, 5, 6],

[7, 8, 9]])

>>> a+b#矩陣的加減運算和數組運算一緻

matrix([[ 2, 4, 6],

[ 8, 10, 12],

[14, 16, 18]])

>>> a-b

matrix([[0, 0, 0],

[0, 0, 0],

[0, 0, 0]])

>>> a*b#矩陣的乘用*即可表示

matrix([[ 30, 36, 42],

[ 66, 81, 96],

[102, 126, 150]])

>>> np.dot(a,b)#與*一緻

matrix([[ 30, 36, 42],

[ 66, 81, 96],

[102, 126, 150]])

>>> b*a

matrix([[ 30, 36, 42],

[ 66, 81, 96],

[102, 126, 150]])

>>> np.dot(b,a)

matrix([[ 30, 36, 42],

[ 66, 81, 96],

[102, 126, 150]])

>>> c=np.array([1,2,3])#構造一行三列數組

>>> c

array([1, 2, 3])

>>> c*a#矩陣運算

matrix([[30, 36, 42]])

>>> a*c#不合矩陣規則

Traceback (most recent call last):

File "", line 1, in

a*c

File "F:\python3\anzhuang\lib\site-packages\numpy\matrixlib\defmatrix.py", line 309, in __mul__

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

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

>>> np.dot(c,a)#和矩陣運算一緻

matrix([[30, 36, 42]])

>>> np.dot(a,c)#自動将a轉換成3行1列參與運算,傳回結果格式已經變為1行3列而非3行一列的矩陣

matrix([[14, 32, 50]])

>>> c=c.reshape(3,1)

>>> c

array([[1],

[2],

[3]])

>>> a*c#和矩陣運算一緻

matrix([[14],

[32],

[50]])

>>> c*a#不合矩陣運算格式

Traceback (most recent call last):

File "", line 1, in

c*a

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

矩陣運算的另一個好處就是友善于求轉置,求逆,求迹

>>> a

matrix([[1, 2, 3],

[4, 5, 6],

[7, 8, 9]])

>>> a.T

matrix([[1, 4, 7],

[2, 5, 8],

[3, 6, 9]])

>>> a.H#共轭轉置

matrix([[1, 4, 7],

[2, 5, 8],

[3, 6, 9]])

>>> b=np.eye(3)*3

>>> b

array([[3., 0., 0.],

[0., 3., 0.],

[0., 0., 3.]])

>>> b=np.mat(b)

>>> b.I#求逆運算

matrix([[0.33333333, 0. , 0. ],

[0. , 0.33333333, 0. ],

[0. , 0. , 0.33333333]])

>>> np.trace(b)#求迹運算

9.0

Python實作取矩陣的部分列并重新儲存的方法

首先輸入一個矩陣:

>>> b=[[1,2,3,4,5,6],[2,2,3,4,5,6],[3,2,3,4,5,6],[4,2,3,4,5,6],[5,2,3,4,5,6]]

>>> b=np.array(b)

>>> b

array([[1, 2, 3, 4, 5, 6],

[2, 2, 3, 4, 5, 6],

[3, 2, 3, 4, 5, 6],

[4, 2, 3, 4, 5, 6],

[5, 2, 3, 4, 5, 6]])

目标:取上述矩陣的2,3,4,5,6列

>>> e=b[:,1:len(b[0])]

>>> e

array([[2, 3, 4, 5, 6],

[2, 3, 4, 5, 6],

[2, 3, 4, 5, 6],

[2, 3, 4, 5, 6],

[2, 3, 4, 5, 6]])

以上這篇Python 實作取矩陣的部分列,儲存為一個新的矩陣方法就是小編分享給大家的全部内容了,希望能給大家一個參考,也希望大家多多支援碼農之家。

以上就是本次給大家分享的關于java的全部知識點内容總結,大家還可以在下方相關文章裡找到相關文章進一步學習,感謝大家的閱讀和支援。