這篇文章主要介紹了Python中的Numpy入門教程,著重講解了矩陣中的數(shù)組操作,需要的朋友可以參考下
1、Numpy是什么
很簡單,Numpy是Python的一個科學計算的庫,提供了矩陣運算的功能,其一般與Scipy、matplotlib一起使用。其實,list已經(jīng)提供了類似于矩陣的表示形式,不過numpy為我們提供了更多的函數(shù)。如果接觸過matlab、scilab,那么numpy很好入手。在以下的代碼示例中,總是先導入了numpy:
代碼如下:
>>>importnumpyasnp
>>>printnp.version.version
1.6.2
2、多維數(shù)組
多維數(shù)組的類型是:numpy.ndarray。
使用numpy.array方法
以list或tuple變量為參數(shù)產(chǎn)生一維數(shù)組:
代碼如下:>>>printnp.array([1,2,3,4])
[1234]
>>>printnp.array((1.2,2,3,4))
[1.22.3.4.]
>>>printtype(np.array((1.2,2,3,4)))
<type'numpy.ndarray'>
以list或tuple變量為元素產(chǎn)生二維數(shù)組:
代碼如下:
>>>printnp.array([[1,2],[3,4]])
[[12]
[34]]
生成數(shù)組的時候,可以指定數(shù)據(jù)類型,例如numpy.int32,numpy.int16,andnumpy.float64等:
代碼如下:
>>>printnp.array((1.2,2,3,4),dtype=np.int32)
[1234]
使用numpy.arange方法
代碼如下:
>>>printnp.arange(15)
[01234567891011121314]
>>>printtype(np.arange(15))
<type'numpy.ndarray'>
>>>printnp.arange(15).reshape(3,5)
[[01234]
[56789]
[1011121314]]
>>>printtype(np.arange(15).reshape(3,5))
<type'numpy.ndarray'>
使用numpy.linspace方法
例如,在從1到3中產(chǎn)生9個數(shù):
代碼如下:
>>>printnp.linspace(1,3,9)
[1.1.251.51.752.2.252.52.753.]
使用numpy.zeros,numpy.ones,numpy.eye等方法可以構造特定的矩陣
例如:
代碼如下:
>>>printnp.zeros((3,4))
[[0.0.0.0.]
[0.0.0.0.]
[0.0.0.0.]]
>>>printnp.ones((3,4))
[[1.1.1.1.]
[1.1.1.1.]
[1.1.1.1.]]
>>>printnp.eye(3)
[[1.0.0.]
[0.1.0.]
[0.0.1.]]
創(chuàng)建一個三維數(shù)組:
代碼如下:
>>>printnp.zeros((2,2,2))
[[[0.0.]
[0.0.]]
[[0.0.]
[0.0.]]]
獲取數(shù)組的屬性:
代碼如下:
>>>a=np.zeros((2,2,2))
>>>printa.ndim#數(shù)組的維數(shù)
3
>>>printa.shape#數(shù)組每一維的大小
(2,2,2)
>>>printa.size#數(shù)組的元素數(shù)
8
>>>printa.dtype#元素類型
float64
>>>printa.itemsize#每個元素所占的字節(jié)數(shù)
8
數(shù)組索引,切片,賦值
示例:
代碼如下:
>>>a=np.array([[2,3,4],[5,6,7]])
>>>printa
[[234]
[567]]
>>>printa[1,2]
7
>>>printa[1,:]
[567]
>>>printa[1,1:2]
[6]
>>>a[1,:]=[8,9,10]
>>>printa
[[234]
[8910]]
使用for操作元素
代碼如下:
>>>forxinnp.linspace(1,3,3):
...printx
...
1.0
2.0
3.0
基本的數(shù)組運算
先構造數(shù)組a、b:
代碼如下:
>>>a=np.ones((2,2))
>>>b=np.eye(2)
>>>printa
[[1.1.]
[1.1.]]
>>>printb
[[1.0.]
[0.1.]]
數(shù)組的加減乘除:
代碼如下:
>>>printa>2
[[FalseFalse]
[FalseFalse]]
>>>printa+b
[[2.1.]
[1.2.]]
>>>printa-b
[[0.1.]
[1.0.]]
>>>printb*2
[[2.0.]
[0.2.]]
>>>print(a*2)*(b*2)
[[4.0.]
[0.4.]]
>>>printb/(a*2)
[[0.50.]
[0.0.5]]
>>>print(a*2)**4
[[16.16.]
[16.16.]]
使用數(shù)組對象自帶的方法:
代碼如下:
>>>a.sum()
4.0
>>>a.sum(axis=0)#計算每一列(二維數(shù)組中類似于矩陣的列)的和
array([2.,2.])
>>>a.min()
1.0
>>>a.max()
1.0
使用numpy下的方法:
代碼如下:
>>>np.sin(a)
array([[0.84147098,0.84147098],
[0.84147098,0.84147098]])
>>>np.max(a)
1.0
>>>np.floor(a)
array([[1.,1.],
[1.,1.]])
>>>np.exp(a)
array([[2.71828183,2.71828183],
[2.71828183,2.71828183]])
>>>np.dot(a,a)##矩陣乘法
array([[2.,2.],
[2.,2.]])
合并數(shù)組
使用numpy下的vstack和hstack函數(shù):
代碼如下:
>>>a=np.ones((2,2))
>>>b=np.eye(2)
>>>printnp.vstack((a,b))
[[1.1.]
[1.1.]
[1.0.]
[0.1.]]
>>>printnp.hstack((a,b))
[[1.1.1.0.]
[1.1.0.1.]]
看一下這兩個函數(shù)有沒有涉及到淺拷貝這種問題:
代碼如下:
>>>c=np.hstack((a,b))
>>>printc
[[1.1.1.0.]
[1.1.0.1.]]
>>>a[1,1]=5
>>>b[1,1]=5
>>>printc
[[1.1.1.0.]
[1.1.0.1.]]
可以看到,a、b中元素的改變并未影響c。
深拷貝數(shù)組
數(shù)組對象自帶了淺拷貝和深拷貝的方法,但是一般用深拷貝多一些:
代碼如下:>>>a=np.ones((2,2))
>>>b=a
>>>bisa
True
>>>c=a.copy()#深拷貝
>>>cisa
False
基本的矩陣運算
轉(zhuǎn)置:
代碼如下:
>>>a=np.array([[1,0],[2,3]])
>>>printa
[[10]
[23]]
>>>printa.transpose()
[[12]
[03]]
跡:
代碼如下:>>>printnp.trace(a)
4
numpy.linalg模塊中有很多關于矩陣運算的方法:
代碼如下:
>>>importnumpy.linalgasnplg
特征值、特征向量:
代碼如下:
>>>printnplg.eig(a)
(array([3.,1.]),array([[0.,0.70710678],
[1.,-0.70710678]]))3、矩陣
numpy也可以構造矩陣對象,這里不做討論。
更多信息請查看IT技術專欄