日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

NumPy入门攻略:手把手带你玩转这款强大的数据分析和计算工具

發(fā)布時(shí)間:2025/3/15 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NumPy入门攻略:手把手带你玩转这款强大的数据分析和计算工具 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


導(dǎo)讀:NumPy(Numerical Python的簡(jiǎn)稱)是高性能科學(xué)計(jì)算和數(shù)據(jù)分析的基礎(chǔ)包,提供了矩陣運(yùn)算的功能。


在處理自然語(yǔ)言過(guò)程中,需要將文字(中文或其他語(yǔ)言)轉(zhuǎn)換為向量。即把對(duì)文本內(nèi)容的處理簡(jiǎn)化為向量空間中的向量運(yùn)算。基于向量運(yùn)算,我們就可以實(shí)現(xiàn)文本語(yǔ)義相似度、特征提取、情感分析、文本分類等功能。


作者:涂銘,劉祥,劉樹春

如需轉(zhuǎn)載請(qǐng)聯(lián)系大數(shù)據(jù)(ID:hzdashuju)


NumPy提供了以下幾個(gè)主要功能:


  • ndarray——一個(gè)具有向量算術(shù)運(yùn)算和復(fù)雜廣播能力的多維數(shù)組對(duì)象。

  • 用于對(duì)數(shù)組數(shù)據(jù)進(jìn)行快速運(yùn)算的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)。

  • 用于讀寫磁盤數(shù)據(jù)的工具以及用于操作內(nèi)存映射文件的工具。

  • 非常有用的線性代數(shù),傅里葉變換和隨機(jī)數(shù)操作。

  • 用于集成C /C++和Fortran代碼的工具。


除明顯的科學(xué)用途之外,NumPy也可以用作通用數(shù)據(jù)的高效多維容器,可以定義任意的數(shù)據(jù)類型。這些使得NumPy能無(wú)縫、快速地與各種數(shù)據(jù)庫(kù)集成。


提示:這里提到的“廣播”可以這么理解:當(dāng)有兩個(gè)維度不同的數(shù)組(array)運(yùn)算的時(shí)候,可以用低維的數(shù)組復(fù)制成高維數(shù)組參與運(yùn)算(因?yàn)镹umPy運(yùn)算的時(shí)候需要結(jié)構(gòu)相同)。


本文NumPy的要點(diǎn)包括:


  • 創(chuàng)建NumPy數(shù)組

  • 獲取NumPy中數(shù)組的維度

  • NumPy數(shù)組索引與切片

  • NumPy數(shù)組比較

  • 替代值

  • NumPy數(shù)據(jù)類型轉(zhuǎn)換

  • NumPy的統(tǒng)計(jì)計(jì)算方法



01 創(chuàng)建數(shù)組


在NumPy中,最核心的數(shù)據(jù)結(jié)構(gòu)是ndarray,ndarray代表的是多維數(shù)組,數(shù)組指的是數(shù)據(jù)的集合。為了方便理解,我們來(lái)舉一個(gè)小例子。


1. 一個(gè)班級(jí)里學(xué)生的學(xué)號(hào)可以通過(guò)一維數(shù)組來(lái)表示:數(shù)組名叫a,在a中存儲(chǔ)的是數(shù)值類型的數(shù)據(jù),分別是1,2,3,4。


索引

學(xué)號(hào)

0

1

1

2

2

3

3

4


其中a[0]代表的是第一個(gè)學(xué)生的學(xué)號(hào)1,a[1]代表的是第二個(gè)學(xué)生的學(xué)號(hào)2,以此類推。


2. 一個(gè)班級(jí)里學(xué)生的學(xué)號(hào)和姓名,則可以用二維數(shù)組來(lái)表示:數(shù)組名叫b


1

Tim

2

Joey

3

Johnny

4

Frank


類似的,其中b[0,0]代表的就是1(學(xué)號(hào)),b[0,1]代表的就是Tim(學(xué)號(hào)為1的學(xué)生的名字),以此類推b[1,0]代表的是2(學(xué)號(hào))等。


借用線性代數(shù)的說(shuō)法,一維數(shù)組通常稱為向量(vector),二維數(shù)組通常稱為矩陣(matrix)。


當(dāng)我們安裝完Anaconda之后,默認(rèn)情況下NumPy已經(jīng)在庫(kù)中了,所以不需要額外安裝。我們來(lái)寫一些語(yǔ)句簡(jiǎn)單測(cè)試下NumPy:


1)在Anaconda中輸入,如果沒(méi)有報(bào)錯(cuò),那么說(shuō)明NumPy是正常工作的。


In?[1]:?import?numpy?as?np


稍微解釋下這句語(yǔ)句:通過(guò)import關(guān)鍵字將NumPy庫(kù)引入,然后通過(guò)as為其取一個(gè)別名np,別名的作用是為了之后寫代碼的時(shí)候方便引用。


2)通過(guò)NumPy中的array(),可以將向量直接導(dǎo)入:


vector?=?np.array([1,2,3,4])


3)通過(guò)numpy.array()方法,也可以將矩陣導(dǎo)入:


matrix?=?np.array([[1,'Tim'],[2,'Joey'],[3,'Johnny'],[4,'Frank']])



02 獲取NumPy中數(shù)組的維度


首先我們通過(guò)NumPy中的一個(gè)方法arange(n),生成0到n-1的數(shù)組。比如我們輸入np.arange(15),可以看到返回的結(jié)果是array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])。


之后再通過(guò)NumPy中的reshape(row,column)方法,自動(dòng)構(gòu)架一個(gè)多行多列的array對(duì)象。


比如我們輸入:


a?=?np.arange(15).reshape(3,5)?#代表3行5列


可以看到結(jié)果:


array([[?0,??1,??2,??3,??4],
???????[?5,??6,??7,??8,??9],
???????[10,?11,?12,?13,?14]])


我們有了基本數(shù)據(jù)之后,可以通過(guò)NumPy提供的shape屬性獲取NumPy數(shù)組的維度。


print(a.shape)


可以看到返回的結(jié)果,這個(gè)是一個(gè)元組(tuple),第一個(gè)3代表的是3行,第二個(gè)5代表的是5列:


(3,?5)



03 獲取本地?cái)?shù)據(jù)


我們可以通過(guò)NumPy中g(shù)enfromtxt()方法來(lái)讀取本地的數(shù)據(jù)集。需要使用的數(shù)據(jù)集,house-prices.csv是由逗號(hào)(,)分隔的,在Github的data目錄下能下載到。我們可以使用以下語(yǔ)句來(lái)讀取這個(gè)數(shù)據(jù)集:


import?numpy?as?np
nfl?=?np.genfromtxt("D:/numpy/data/price.csv",?delimiter=",")
print(nfl)


上述代碼從本地讀取price.csv文件到NumPy數(shù)組對(duì)象中(ndarray),我們看一下數(shù)據(jù)集的前幾行。


[[???????????????nan??????????????nan?????????????nan?????????????nan
?????????????????nan??????????????nan]
????[??1.00000000e+00??1.14300000e+05??2.00000000e+00??2.00000000e+00
?????????????????nan??????????????nan]
????[??2.00000000e+00??1.14200000e+05??4.00000000e+00??2.00000000e+00
?????????????????nan??????????????nan]
????[??3.00000000e+00??1.14800000e+05??3.00000000e+00??2.00000000e+00
?????????????????nan??????????????nan]
????[??4.00000000e+00??9.47000000e+04??3.00000000e+00??2.00000000e+00
?????????????????nan??????????????nan]


暫時(shí)先不用考慮返回?cái)?shù)據(jù)中出現(xiàn)的nan。


每一行的數(shù)據(jù)代表了房間的地區(qū),是否是磚瓦結(jié)構(gòu),有多少臥室、洗手間以及價(jià)格的描述。


每個(gè)列代表了:


  • Home:房子的id

  • Price:房子的價(jià)格

  • Bedrooms:有多少個(gè)臥室

  • Bathroom:有多少個(gè)洗手間

  • Brick:是否是磚房

  • Neighborhood:地區(qū)


注意:NumPy數(shù)組中的數(shù)據(jù)必須是相同類型,比如布爾類型(bool)、整型(int),浮點(diǎn)型(float)以及字符串類型(string)。NumPy可以自動(dòng)判斷數(shù)組內(nèi)的對(duì)象類型,我們可以通過(guò)NumPy數(shù)組提供的dtype屬性來(lái)獲取類型。



04 正確讀取數(shù)據(jù)


回到之前的話題,上文發(fā)現(xiàn)顯示出來(lái)的數(shù)據(jù)里面有數(shù)據(jù)類型na(not available)和nan(not a number),前者表示讀取的數(shù)值是空的、不存在的,后者是因?yàn)閿?shù)據(jù)類型轉(zhuǎn)換出錯(cuò)。對(duì)于nan的出錯(cuò),我們可以用genfromtxt()來(lái)轉(zhuǎn)化數(shù)據(jù)類型。


  • dtype關(guān)鍵字要設(shè)定為‘U75’.表示每個(gè)值都是75byte的unicode。

  • skip_header關(guān)鍵字可以設(shè)置為整數(shù),這個(gè)參數(shù)可以跳過(guò)文件開(kāi)頭的對(duì)應(yīng)的行數(shù),然后再執(zhí)行任何其他操作。


import?numpy?as?np
nfl?=?np.genfromtxt("d:/numpy/data/price.csv",?dtype='U75',?skip_header?=?1,delimiter=",")
print(nfl)



05 NumPy數(shù)組索引


NumPy支持list一樣的定位操作。舉例來(lái)說(shuō):


import?numpy?as?np
matrix?=?np.array([[1,2,3],[20,30,40]])
print(matrix[0,1])


得到的結(jié)果是2。


上述代碼中的matrix[0,1],其中0代表的是行,在NumPy中0代表起始第一個(gè),所以取的是第一行,之后的1代表的是列,所以取的是第二列。那么最后第一行第二列就是2這個(gè)值了。



06 切片


NumPy支持list一樣的切片操作。


import?numpy?as?np
matrix?=?np.array([
[5,?10,?15],?
????[20,?25,?30],
????[35,?40,?45]
????])
print(matrix[:,1])
print(matrix[:,0:2])
print(matrix[1:3,:])
print(matrix[1:3,0:2])


上述的print(matrix[:,1])語(yǔ)法代表選擇所有的行,但是列的索引是1的數(shù)據(jù)。那么就返回10,25,40。


print(matrix[:,0:2])代表的是選取所有的行,列的索引是0和1。


print(matrix[1:3,:])代表的是選取行的索引值1和2以及所有的列。


print(matrix[1:3,0:2])代表的是選取行的索引1和2以及列的索引是0和1的所有數(shù)據(jù)。



07 數(shù)組比較


NumPy強(qiáng)大的地方是數(shù)組或矩陣的比較,數(shù)據(jù)比較之后會(huì)產(chǎn)生boolean值。


舉例來(lái)說(shuō):


import?numpy?as?np
matrix?=?np.array([
????[5,?10,?15],
[20,?25,?30],
[35,?40,?45]
])
m?=?(matrix?==?25)
print(m)


我們看到輸出的結(jié)果為:


[[False?False?False]
????[False??True?False]
????[False?False?False]]


我們?cè)賮?lái)看一個(gè)比較復(fù)雜的例子:


import?numpy?as?np
matrix?=?np.array([
[5,?10,?15],
[20,?25,?30],
[35,?40,?45]
????])
second_column_25?=?(matrix[:,1]?==?25)
print(second_column_25)
print(matrix[second_column_25,?:])


上述代碼中print(second_column_25)輸出的是[False True False],首先matrix[:,1]代表的是所有的行,以及索引為1的列->[10,25,40],最后和25進(jìn)行比較,得到的就是false,true,false。print(matrix[second_column_25, :])代表的是返回true值的那一行數(shù)據(jù)-> [20,25,30]。


注意:上述的例子是單個(gè)條件,NumPy也允許我們使用條件符來(lái)拼接多個(gè)條件,其中“&”代表的是“且”,“|”代表的是“或”。比如vector=np.array([5,10,11,12]),equal_to_five_and_ten =(vector == 5) & (vector == 10)返回的都是false,如果是equal_to_five_or_ten =(vector == 5)|(vector == 10)返回的是[True,True,False,False]



08 替代值


NumPy可以運(yùn)用布爾值來(lái)替換值。


在數(shù)組中:


vector?=?numpy.array([5,?10,?15,?20])
equal_to_ten_or_five?=?(vector?==?10)?|?(vector?==?5)
vector[equal_to_ten_or_five]?=?50
print(vector)
[50,?50,?15,?20]


在矩陣中:


matrix?=?numpy.array([
[5,?10,?15],
[20,?25,?30],
[35,?40,?45]
])
second_column_25?=?matrix[:,1]?==?25
matrix[second_column_25,?1]?=?10
print(matrix)
[[?5?10?15]
????[20?10?30]
????[35?40?45]]


我們先創(chuàng)立數(shù)組matrix。將matrix的第二列和25比較,得到一個(gè)布爾值數(shù)組。second_column_25將matrix第二列值為25的替換為10。


替換有一個(gè)很棒的應(yīng)用之處,就是替換那些空值。之前提到過(guò)NumPy中只能有一個(gè)數(shù)據(jù)類型。我們現(xiàn)在讀取一個(gè)字符矩陣,其中有一個(gè)值為空值。其中的空值我們很有必要把它替換成其他值,比如數(shù)據(jù)的平均值或者直接把他們刪除。這在大數(shù)據(jù)處理中很有必要。這里,我們演示把空值替換為“0”的操作。


import?numpy?as?np
matrix?=?np.array([
['5',?'10',?'15'],
['20',?'25',?'30'],
['35',?'40',''?]
????])
second_column_25?=?(matrix[:,2]?==?'')
matrix[second_column_25,?2]='0'
print(matrix)



09 數(shù)據(jù)類型轉(zhuǎn)換


NumPy ndarray數(shù)據(jù)類型可以通過(guò)參數(shù)dtype 設(shè)定,而且可以使用astype轉(zhuǎn)換類型,在處理文件時(shí)這個(gè)會(huì)很實(shí)用,注意astype 調(diào)用會(huì)返回一個(gè)新的數(shù)組,也就是原始數(shù)據(jù)的一份復(fù)制。


比如,把String轉(zhuǎn)換成float。如下:


vector?=?numpy.array(["1",?"2",?"3"])
vector?=?vector.astype(float)


注意:上述例子中,如果字符串中包含非數(shù)字類型的時(shí)候,從string轉(zhuǎn)float就會(huì)報(bào)錯(cuò)。



10 NumPy的統(tǒng)計(jì)計(jì)算方法


NumPy內(nèi)置很多計(jì)算方法。其中最重要的統(tǒng)計(jì)方法有:


  • sum():計(jì)算數(shù)組元素的和;對(duì)于矩陣計(jì)算結(jié)果為一個(gè)一維數(shù)組,需要指定行或者列。

  • mean():計(jì)算數(shù)組元素的平均值;對(duì)于矩陣計(jì)算結(jié)果為一個(gè)一維數(shù)組,需要指定行或者列。

  • max():計(jì)算數(shù)組元素的最大值;對(duì)于矩陣計(jì)算結(jié)果為一個(gè)一維數(shù)組,需要指定行或者列。


需要注意的是,用于這些統(tǒng)計(jì)方法計(jì)算的數(shù)值類型必須是int或者float。


數(shù)組例子:


vector?=?numpy.array([5,?10,?15,?20])
vector.sum()
#得到的結(jié)果是50


矩陣?yán)?#xff1a;


matrix=
array([[?5,?10,?15],
??????????[20,?10,?30],
??????????[35,?40,?45]])
matrix.sum(axis=1)
array([?30,??60,?120])
matrix.sum(axis=0)
array([60,?60,?90])


如上述例子所示,axis = 1計(jì)算的是行的和,結(jié)果以列的形式展示。axis = 0計(jì)算的是列的和,結(jié)果以行的形式展示。


延伸學(xué)習(xí)


官方推薦教程是不錯(cuò)的入門選擇:

https://docs.scipy.org/doc/numpy-dev/user/quickstart.html


關(guān)于作者:涂銘,阿里巴巴數(shù)據(jù)架構(gòu)師,對(duì)大數(shù)據(jù)、自然語(yǔ)言處理、Python、Java相關(guān)技術(shù)有深入的研究,積累了豐富的實(shí)踐經(jīng)驗(yàn)。

劉祥,百煉智能自然語(yǔ)言處理專家,主要研究知識(shí)圖譜、NLG等前沿技術(shù),參與機(jī)器自動(dòng)寫作產(chǎn)品的研發(fā)與設(shè)計(jì)。

劉樹春,七牛云高級(jí)算法專家,七牛AI實(shí)驗(yàn)室NLP&OCR方向負(fù)責(zé)人,主要負(fù)責(zé)七牛NLP以及OCR相關(guān)項(xiàng)目的研究與落地。


本文摘編自《Python自然語(yǔ)言處理實(shí)戰(zhàn):核心技術(shù)與算法》,經(jīng)出版方授權(quán)發(fā)布。


延伸閱讀《Python自然語(yǔ)言處理實(shí)戰(zhàn)

點(diǎn)擊上圖了解及購(gòu)買

轉(zhuǎn)載請(qǐng)聯(lián)系微信:togo-maruko


推薦語(yǔ):阿里巴巴、前明略數(shù)據(jù)和七牛云的高級(jí)專家和科學(xué)家撰寫,零基礎(chǔ)掌握NLP的核心技術(shù)、方法論和經(jīng)典算法。



據(jù)統(tǒng)計(jì),99%的大咖都完成了這個(gè)神操作



更多精彩


在公眾號(hào)后臺(tái)對(duì)話框輸入以下關(guān)鍵詞

查看更多優(yōu)質(zhì)內(nèi)容!


PPT?|?報(bào)告?|?讀書?|?書單

大數(shù)據(jù)?|?揭秘?|?人工智能?|?AI

Python?|?機(jī)器學(xué)習(xí)?|?深度學(xué)習(xí)?|?神經(jīng)網(wǎng)絡(luò)

可視化?|?區(qū)塊鏈?|?干貨?|?數(shù)學(xué)


猜你想看


  • 白領(lǐng)體檢異常率連年走高,這5本書教你怎樣科學(xué)"養(yǎng)生"

  • 跟著阿里大牛撈干貨:2019這5本書帶你玩轉(zhuǎn)大數(shù)據(jù)

  • 學(xué)AI哪家強(qiáng)?清華全球第1,Top5中有這3所中國(guó)高校

  • 過(guò)去的2018年,400000粉絲用指尖投票,選出了這10本技術(shù)書



Q:?你在用NumPy嗎?都用來(lái)做什么?

歡迎留言與大家分享

覺(jué)得不錯(cuò),請(qǐng)把這篇文章分享給你的朋友

轉(zhuǎn)載 / 投稿請(qǐng)聯(lián)系:baiyu@hzbook.com

更多精彩,請(qǐng)?jiān)诤笈_(tái)點(diǎn)擊“歷史文章”查看

點(diǎn)擊閱讀原文,了解更多

總結(jié)

以上是生活随笔為你收集整理的NumPy入门攻略:手把手带你玩转这款强大的数据分析和计算工具的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。