NumPy快速入門(mén)

Python 2.7
IPython 4.1.2


關(guān)于Numpy

  • Numpy是Python的一個(gè)矩陣類(lèi)型,提供大量矩陣處理函數(shù),內(nèi)部通過(guò)C實(shí)現(xiàn)。
  • 包含兩種數(shù)據(jù)結(jié)構(gòu),數(shù)組array和矩陣matrix,其實(shí)就是array而已

構(gòu)建數(shù)組array

  • 通過(guò)tuple構(gòu)建array
In[1]: from numpy import *

In[2]: yuanzu = (4,5,6)
In[3]: ll = array(yuanzu)
In[4]: ll

Out[4]: array([4, 5, 6])
  • 通過(guò)list構(gòu)建array
In[5]: pylist = [0,1,2]
In[6]: jj = array(pylist)
In[7]: jj

Out[7]: array([0, 1, 2])

  • 構(gòu)建多維array
In[95]: pylist1 = [1,2,3]
In[96]: pylist2 = [4,5,6]
In[100]: marray = array([pylist1,pylist2])
In[102]: marray

Out[102]: 
array([[1, 2, 3],
       [4, 5, 6]])

array基本操作

以marray的array來(lái)說(shuō)

In[102]: marray

Out[102]: 
array([[1, 2, 3],
       [4, 5, 6]])
  • array索引
In[104]: marray[0][2]
Out[104]: 3
  • array的對(duì)應(yīng)相乘
In[105]: marray*2

Out[105]: 
array([[ 2,  4,  6],
       [ 8, 10, 12]])

In[106]: marray*marray

Out[106]: 
array([[ 1,  4,  9],
       [16, 25, 36]])


構(gòu)建矩陣matrix

  • 同樣可由tuple和list構(gòu)建matrix
#由list構(gòu)建
In[84]: mm = mat(pylist)
In[85]: mm

Out[85]: matrix([[0, 1, 2]])

#由tuple構(gòu)建
In[107]: oo = mat(yuanzu)
In[108]: oo

Out[108]: matrix([[4, 5, 6]])

  • 由array構(gòu)建matrix
In[109]: pp = mat(marray)
In[110]: pp
Out[110]: 
matrix([[1, 2, 3],
        [4, 5, 6]])

matrix基本操作

對(duì)下面的pp矩陣來(lái)操作

In[110]: pp
Out[110]: 
matrix([[1, 2, 3],
        [4, 5, 6]])
  • 查看維數(shù).shape
In[111]: pp.shape
Out[111]: (2L, 3L) #兩行三列的矩陣
  • 取值,可以使用分片方法
In[116]: pp[1,2] #取第二行第三列元素
Out[116]: 6

In[115]: pp[1,:] #取第二行,所有列
Out[115]: matrix([[4, 5, 6]])

  • 轉(zhuǎn)置.T
In[112]: pp.T
Out[112]: 
matrix([[1, 4],
        [2, 5],
        [3, 6]])
  • 矩陣乘法,注意矩陣乘法的規(guī)則,(m,n)*(n,p),對(duì)應(yīng)維數(shù)。
In[113]: pp*(pp.T)

Out[113]: 
matrix([[14, 32],
        [32, 77]])
  • 對(duì)應(yīng)元素相乘 multiply(a,b)
In[114]: multiply(pp,pp)

Out[114]: 
matrix([[ 1,  4,  9],
        [16, 25, 36]])
  • 排序sort,注意是原地排序,會(huì)改變?cè)紨?shù)據(jù),這個(gè)和pandas中的index操作不一樣
In[119]: qq = mat([2,1,3]) #構(gòu)建一個(gè)新的matrix
In[120]: qq

Out[120]: matrix([[2, 1, 3]])


In[121]: qq.sort() #進(jìn)行遞增排序,改變?cè)瓉?lái)數(shù)據(jù)
In[122]: qq

Out[122]: matrix([[1, 2, 3]])
  • 獲得矩陣中每個(gè)元素的排序序號(hào)
In[126]: cc = mat([[3,1,4],[2,3,4]]) #重新構(gòu)建一個(gè)矩陣
In[127]: cc

Out[127]: 
matrix([[3, 1, 4],
        [2, 3, 4]])


In[128]: cc.argsort()

Out[128]: 
matrix([[1, 0, 2],
        [0, 1, 2]], dtype=int64)
#比如說(shuō)[3,1,4]這一行,元素先從小到大排序?yàn)閇1,3,4],對(duì)應(yīng)1的元素在原本的矩陣中索引應(yīng)該是1,對(duì)應(yīng)3的索引是0,4的索引是2,所以得出[1,0,2]

array VS matrix

官方建議多使用array

The main advantage of numpy arrays is that they are more general than 2-dimensional matrices. What happens when you want a 3-dimensional array? Then you have to use an ndarray, not a matrix object. Thus, learning to use matrix objects is more work -- you have to learn matrix object operations, and ndarray operations.

一句話,matrix應(yīng)該算是array的一個(gè)分支,只是array的二維表示而已,matrix的操作,array都可以完成,值得注意的是,想要完成矩陣相乘,而不是對(duì)應(yīng)相乘,array需要采用dot方法,舉個(gè)例子

#對(duì)應(yīng)相乘
In[129]: marray*marray

Out[129]: 
array([[ 1,  4,  9],
       [16, 25, 36]])

#矩陣相乘
In[130]: marray.dot(marray.T)
Out[130]: 
array([[14, 32],
       [32, 77]])

總結(jié)

If you are willing to give up the visual appeal of numpy matrix product notation, then I think numpy arrays are definitely the way to go.

--也就是,沒(méi)事多用用array


致謝

利用python進(jìn)行數(shù)據(jù)分析.Wes McKinney
機(jī)器學(xué)習(xí)實(shí)戰(zhàn).Peter Harrington

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 來(lái)源:NumPy Tutorial - TutorialsPoint 譯者:飛龍 協(xié)議:CC BY-NC-SA 4...
    布客飛龍閱讀 33,002評(píng)論 6 98
  • 一.NumPy的引入 標(biāo)準(zhǔn)安裝的Python中用列表(list)保存一組值,可以用來(lái)當(dāng)作數(shù)組使用,不過(guò)由于列...
    wlj1107閱讀 1,047評(píng)論 0 2
  • 原英文文檔 encoding:utf-8 1.導(dǎo)入包 2.顯示版本,打印配置信息 3.創(chuàng)建一個(gè)size為10值為0...
    charmler閱讀 2,296評(píng)論 0 1
  • 先決條件 在閱讀這個(gè)教程之前,你多少需要知道點(diǎn)python。如果你想從新回憶下,請(qǐng)看看Python Tutoria...
    舒map閱讀 2,602評(píng)論 1 13
  • NumPy是Python中關(guān)于科學(xué)計(jì)算的一個(gè)類(lèi)庫(kù),在這里簡(jiǎn)單介紹一下。 來(lái)源:https://docs.scipy...
    灰太狼_black閱讀 1,251評(píng)論 0 5