小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

python數(shù)據(jù)分析基礎(chǔ):numpy

 昵稱63557093 2020-02-22

  numpy是python高性能科學(xué)計(jì)算和數(shù)據(jù)分析的基礎(chǔ)包,python的很多其他庫都構(gòu)建在numpy之上,因此你要用python做數(shù)據(jù)分析與挖掘都最好先學(xué)一下numpy的基本操作(當(dāng)然要學(xué)numpy首先要把python語言本身的基本操作要學(xué)一下),這也是我看吳恩達(dá)神經(jīng)網(wǎng)絡(luò)基礎(chǔ)課程的感受,否則聽的時(shí)候可能聽懂了,但是寫代碼的時(shí)候,發(fā)現(xiàn)下不了手,甚至就算看著別人的代碼來寫,也總感覺很模糊。

  python語言提供了list容器,而ndarray是numpy提供的多維數(shù)組對(duì)象,擁有一系列好用的屬性和方法,因?yàn)槲已b的是anaconda,numpy等常用科學(xué)計(jì)算包都是是默認(rèn)安裝的,所以可以直接引入numpy包

  import numpy as np

  創(chuàng)建ndarray

  通過numpy提供的array函數(shù)np.array(data,dtype=np.int32)可以創(chuàng)建ndarray,同時(shí)可以指定元素?cái)?shù)據(jù)類型,如不指定,numpy會(huì)自己推斷較合適的數(shù)據(jù)類型,對(duì)于大數(shù)據(jù)集,一定要關(guān)注自己的數(shù)據(jù)類型,如圖像的像素值都是0-255之間的數(shù),因此用無符號(hào)的8位就夠了,但如果用4個(gè)字節(jié)的int,每個(gè)像素點(diǎn)就會(huì)浪費(fèi)3個(gè)字節(jié),一張64*64的圖片就會(huì)浪費(fèi)12288個(gè)字節(jié),即12kb,這對(duì)于大數(shù)據(jù)集是非??膳碌摹>唧w有哪些數(shù)據(jù)類型這里不作介紹,需要的時(shí)候去查就好了。

  除此之外,numpy也提供了一些方法來創(chuàng)建一些經(jīng)常用到的數(shù)組。

  # 創(chuàng)建10個(gè)元素全為0的數(shù)組np.zeros(10)# 創(chuàng)建3*6的全為0的數(shù)組np.zeros((3,6))# 創(chuàng)建10個(gè)元素全為1的數(shù)組np.ones(10)# 創(chuàng)建2*3的隨機(jī)數(shù)組arr = np.random.random((2,3))# 創(chuàng)建從0-14的整數(shù)數(shù)組np.arange(15)# 創(chuàng)建一個(gè)10*10單位矩陣,即左上到右下的對(duì)角線元素為1,其余全為0np.eye(10)

  ndarray常用屬性

  以上文中提到到圖片三維ndarray為例

  # ndaray的維度print(arr.ndim) # 因?yàn)槭侨S 所以是3# ndarray的形狀print(arr.shape) # (64,64,3)print(arr.shappe[0]) # 64# ndarray所有元素的個(gè)數(shù)print(arr.size) # 64*64*3 = 12288# ndarray的數(shù)據(jù)類型print(arr.dtype) # int32

  ndarray索引和切片

  數(shù)組索引即如何找到數(shù)組中的元素,ndarray數(shù)組索引除了支持標(biāo)量,同時(shí)還支持切片,以及花式索引(這里不作介紹)。再說切片之前,先說軸,一個(gè)ndarray至少有一個(gè)軸,一維只有一個(gè)x軸,二維的話有x軸和y軸,三維再加一個(gè)z軸,多維同理。有n個(gè)維度,則最多支持n個(gè)索引。如三維數(shù)組,可以通過arr[a]、arr[a][b]或者arr[a,b]、arr[a][b][c]或者[a,b,c]取到某個(gè)特定的元素。

  a,b,c除了可以為具體的數(shù)字,也可以為一個(gè)切片。和python中的list一樣,通過冒號(hào):表示切片,只有:表示整個(gè)軸。:前后都可以寫數(shù)字,如1:5,表示這個(gè)軸上從1到5的元素,1:則表示這個(gè)軸上從1到最后一個(gè)元素:6則表示這個(gè)軸上從0到第6個(gè)元素,元素可能是一個(gè)標(biāo)量也可能是一個(gè)子數(shù)組,示例如下:

  arr = np.arange(10)print(arr) # [0,1,2,3,4,5,6,7,8,9]print(arr[3]) # 3print(arr[:]) # 一維只有一個(gè)x軸,因此輸出 [0,1,2,3,4,5,6,7,8,9]print(arr[3:5]) # x軸上3-5的元素 輸出 [3,4]# 二維數(shù)組arr = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])print(arr[0]) # [1,2,3,4]print(arr[:])

  print(arr[:,:])# 上面這倆條都會(huì)返回整個(gè)arrayprint(arr[1,2:]) # 第一維度上的第一個(gè)元素,從第0個(gè)開始到最后一個(gè)元素 即 [7,8]print(arr[:2]) # 第一個(gè)維度從0到第2個(gè)元素 即 [ [1,2,3,4], [5,6,7,8] ]print(arr[:2,:1]) # [[1],[5]]

  需要注意的是,ndarray中的切片都是原數(shù)組的視圖,因此對(duì)切片的任何操作都會(huì)體現(xiàn)到原數(shù)組中,如果需要拷貝數(shù)組,需要顯示的調(diào)用copy函數(shù)。示例如下

  arr = np.arange(10)print(arr) # [0,1,2,3,4,5,6,7,8,9]print(arr[3:5]) # [3,4]arr[3:5] = 12 # 修改切片同時(shí)會(huì)修改原數(shù)組print(arr[3:5]) # [12,12]print(arr) # [0,1,2,12,12,5,6,7,8,9]copy = arr.copy()

  copy[3:5] = 8print(copy) # [0,1,2,8,8,5,6,7,8,9]print(arr) # [0,1,2,12,12,5,6,7,8,9]

  ndarray運(yùn)算

  大小相等的數(shù)組的數(shù)組之間的任何運(yùn)算都會(huì)應(yīng)用到元素級(jí)別。例如:

  arr1 = np.array([[1,2,3],[4,5,6]])

  arr2 = np.array([[1,2,3],[4,5,6]])print(arr1*2) # [[2,4,6],[8,10,12]]print(arr1+arr2) # [[2,4,6],[8,10,12]]print(arr1*arr2) # [[1,4,9],[16,25,36]]

  ndarray常用函數(shù)

  有些是在numpy命名空間下的,有些則是要通過具體的數(shù)組對(duì)象來調(diào)用,,有的則都可以。下文中,np.func()表示在numpy命名空間下,arr.func()則表示通過具體數(shù)組對(duì)象調(diào)用。

  數(shù)組重塑 arr.reshape(newshape) 參數(shù)為一個(gè)表示新數(shù)組形狀的元組。作為參數(shù)形狀的其中一維可以是-1,表示該維度大小由數(shù)據(jù)本身推斷而來。示例如下:

  arr = np.arange(15).reshape(3,5)print(arr)# [# [0,1,2,3,4],# [5,6,7,8,9],# [10,11,12,13,14]# ]arr = np.arange(15).reshape(3,-1)# 輸出和上面的一樣

  數(shù)組轉(zhuǎn)置arr.transpose() 無參數(shù),也可以直接用T屬性表示,如arr.T表示arr的轉(zhuǎn)置。如果你還記得線性代數(shù),那么轉(zhuǎn)置矩陣聽起來一定很耳熟二維數(shù)組轉(zhuǎn)置比較好理解,即行變成列,列變成行。三維及其以上稍微復(fù)雜點(diǎn),這里不介紹。

  矩陣點(diǎn)乘 np.dot(x,y) 或者 arr.dot(arr.T) 這也是專門針對(duì)線性代數(shù)提供的函數(shù),關(guān)于點(diǎn)乘,等同于線性代數(shù)里的矩陣乘法,因此要滿足前一個(gè)矩陣A的列數(shù)等于后一個(gè)矩陣B的行數(shù),矩陣乘法才有意義。

  除了dot函數(shù),還有其他針對(duì)線性代數(shù)的函數(shù),但這個(gè)在后面的代碼中會(huì)經(jīng)常用到。

  arr.sort()排序函數(shù)

  常用的數(shù)學(xué)計(jì)算以及分析統(tǒng)計(jì)函數(shù)

  這個(gè)有很多,最常見的如求和,求平均值,求方差,標(biāo)準(zhǔn)差,指數(shù),對(duì)數(shù)等。需要做統(tǒng)計(jì)和計(jì)算的時(shí)候,先查下API文檔,看有沒有官方提供的函數(shù)。能用numpy函數(shù)的就用函數(shù),盡量不要自己寫循環(huán)處理數(shù)組,numpy數(shù)組的性能是非常好的。

  以上并不是numpy數(shù)組的全部知識(shí),只是我看了吳恩達(dá)神經(jīng)網(wǎng)絡(luò)基礎(chǔ)課程認(rèn)為當(dāng)下上手編寫代碼需要具備的知識(shí)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多