1.jpg
python自身不支持矩陣運(yùn)算,一般想要在python進(jìn)行矩陣運(yùn)算:一個方法是自己用二維列表定義矩陣症见,然后自己寫矩陣基本運(yùn)算的函數(shù),這個方法有點(diǎn)事倍功半的意思,所以一般不采用矾飞。第二個方法是使用numpy庫。
NumPy是用Python進(jìn)行科學(xué)計(jì)算的基礎(chǔ)軟件包呀邢。它包含以下內(nèi)容:
- 一個強(qiáng)大的N維數(shù)組對象
- 復(fù)雜的(廣播)功能
- 用于集成C / C ++和Fortran代碼的工具
- 有用的線性代數(shù)洒沦,傅里葉變換和隨機(jī)數(shù)能力
除了明顯的科學(xué)用途外,NumPy還可以用作通用數(shù)據(jù)的高效多維容器价淌∩暄郏可以定義任意數(shù)據(jù)類型。這使得NumPy能夠與各種數(shù)據(jù)庫無縫并快速地整合蝉衣。
在python中安裝了numpy庫括尸,就相當(dāng)于安裝了matlab一樣,是的病毡。這個庫能夠讓你在python中操作矩陣仿佛是在matlab中一樣輕松方便濒翻。
下面就對使用這個numpy庫進(jìn)行矩陣運(yùn)算做簡單地介紹
NumPy的數(shù)組類被稱為ndarray,ndarray對象具有如下重要屬性:
- ndarray.ndim 矩陣的維度。在Python中有送,維度的數(shù)量被稱為級數(shù)淌喻。
- ndarray.shape矩陣的尺寸。返回一個數(shù)組雀摘,表示矩陣行和列的大小裸删,也就是每個維度的大小。對于具有n行m列的矩陣阵赠,返回值是(n涯塔,m)。
- ndarray.dtype 一個描述數(shù)組中元素類型的對象清蚀∝拜可以使用標(biāo)準(zhǔn)的Python類型創(chuàng)建或指定dtype。另外NumPy提供它自己的類型枷邪。numpy.int32每聪,numpy.int16和numpy.float64就是一些例子。
- ndarray.itemsize 數(shù)組中每個元素的字節(jié)大小齿风。例如药薯,類型的元件的陣列float64具有itemsize 8(= 64/8),而類型的一個complex32具有itemsize 4(= 32/8)救斑。它相當(dāng)于- - ndarray.dtype.itemsize童本。
- ndarray.data該緩沖區(qū)包含數(shù)組的實(shí)際元素。通常脸候,我們不需要使用此屬性穷娱,因?yàn)槲覀儗⑹褂盟饕O(shè)施訪問數(shù)組中的元素。
下面是一個實(shí)例:
>>> import numpy as np #導(dǎo)入numpy 庫
>>> a = np.arange(15).reshape(3, 5) #arange(15)表示生成從0到14的序列reshape(3, 5)表示將這個序列重新設(shè)置成3行5列的矩陣
>>> a
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
>>> a.shape
(3, 5)
>>> a.ndim
2
>>> a.dtype.name
'int64'
>>> a.itemsize
8
>>> a.size
15
>>> type(a)
<type 'numpy.ndarray'>
>>> b = np.array([6, 7, 8])
>>> b
array([6, 7, 8])
>>> type(b)
<type 'numpy.ndarray'>
比較需要注意的是矩陣的乘法的符號表示运沦,不少人會犯這個小錯誤泵额。
>>> A = np.array( [[1,1],
... [0,1]] )
>>> B = np.array( [[2,0],
... [3,4]] )
>>> A*B # 只是對應(yīng)元素相乘而已
array([[2, 0],
[0, 4]])
>>> A.dot(B) # 這個才是矩陣相乘
array([[5, 4],
[3, 4]])
>>> np.dot(A, B) # 這是另外一種形式
array([[5, 4],
[3, 4]])