Python中的Numpy入門教程

字號:


    這篇文章主要介紹了Python中的Numpy入門教程,著重講解了矩陣中的數(shù)組操作,需要的朋友可以參考下
    1、Numpy是什么
    很簡單,Numpy是Python的一個(gè)科學(xué)計(jì)算的庫,提供了矩陣運(yùn)算的功能,其一般與Scipy、matplotlib一起使用。其實(shí),list已經(jīng)提供了類似于矩陣的表示形式,不過numpy為我們提供了更多的函數(shù)。如果接觸過matlab、scilab,那么numpy很好入手。在以下的代碼示例中,總是先導(dǎo)入了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í)候,可以指定數(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個(gè)數(shù):
    代碼如下:
    >>>printnp.linspace(1,3,9)
    [1.1.251.51.752.2.252.52.753.]
    使用numpy.zeros,numpy.ones,numpy.eye等方法可以構(gòu)造特定的矩陣
    例如:
    代碼如下:
    >>>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)建一個(gè)三維數(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ù)組的元素?cái)?shù)
    8
    >>>printa.dtype#元素類型
    float64
    >>>printa.itemsize#每個(gè)元素所占的字節(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ù)組運(yùn)算
    先構(gòu)造數(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)#計(jì)算每一列(二維數(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.]]
    看一下這兩個(gè)函數(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
    基本的矩陣運(yùn)算
    轉(zhuǎn)置:
    代碼如下:
    >>>a=np.array([[1,0],[2,3]])
    >>>printa
    [[10]
    [23]]
    >>>printa.transpose()
    [[12]
    [03]]
    跡:
    代碼如下:>>>printnp.trace(a)
    4
    numpy.linalg模塊中有很多關(guān)于矩陣運(yùn)算的方法:
    代碼如下:
    >>>importnumpy.linalgasnplg
    特征值、特征向量:
    代碼如下:
    >>>printnplg.eig(a)
    (array([3.,1.]),array([[0.,0.70710678],
    [1.,-0.70710678]]))3、矩陣
    numpy也可以構(gòu)造矩陣對象,這里不做討論。