日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NumPy入门攻略:手把手带你玩转这款强大的数据分析和计算工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


導讀:NumPy(Numerical Python的簡稱)是高性能科學計算和數據分析的基礎包,提供了矩陣運算的功能。


在處理自然語言過程中,需要將文字(中文或其他語言)轉換為向量。即把對文本內容的處理簡化為向量空間中的向量運算。基于向量運算,我們就可以實現文本語義相似度、特征提取、情感分析、文本分類等功能。


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

如需轉載請聯系大數據(ID:hzdashuju)


NumPy提供了以下幾個主要功能:


  • ndarray——一個具有向量算術運算和復雜廣播能力的多維數組對象。

  • 用于對數組數據進行快速運算的標準數學函數。

  • 用于讀寫磁盤數據的工具以及用于操作內存映射文件的工具。

  • 非常有用的線性代數,傅里葉變換和隨機數操作。

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


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


提示:這里提到的“廣播”可以這么理解:當有兩個維度不同的數組(array)運算的時候,可以用低維的數組復制成高維數組參與運算(因為NumPy運算的時候需要結構相同)。


本文NumPy的要點包括:


  • 創建NumPy數組

  • 獲取NumPy中數組的維度

  • NumPy數組索引與切片

  • NumPy數組比較

  • 替代值

  • NumPy數據類型轉換

  • NumPy的統計計算方法



01 創建數組


在NumPy中,最核心的數據結構是ndarray,ndarray代表的是多維數組,數組指的是數據的集合。為了方便理解,我們來舉一個小例子。


1. 一個班級里學生的學號可以通過一維數組來表示:數組名叫a,在a中存儲的是數值類型的數據,分別是1,2,3,4。


索引

學號

0

1

1

2

2

3

3

4


其中a[0]代表的是第一個學生的學號1,a[1]代表的是第二個學生的學號2,以此類推。


2. 一個班級里學生的學號和姓名,則可以用二維數組來表示:數組名叫b


1

Tim

2

Joey

3

Johnny

4

Frank


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


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


當我們安裝完Anaconda之后,默認情況下NumPy已經在庫中了,所以不需要額外安裝。我們來寫一些語句簡單測試下NumPy:


1)在Anaconda中輸入,如果沒有報錯,那么說明NumPy是正常工作的。


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


稍微解釋下這句語句:通過import關鍵字將NumPy庫引入,然后通過as為其取一個別名np,別名的作用是為了之后寫代碼的時候方便引用。


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


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


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


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



02 獲取NumPy中數組的維度


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


之后再通過NumPy中的reshape(row,column)方法,自動構架一個多行多列的array對象。


比如我們輸入:


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


可以看到結果:


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


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


print(a.shape)


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


(3,?5)



03 獲取本地數據


我們可以通過NumPy中genfromtxt()方法來讀取本地的數據集。需要使用的數據集,house-prices.csv是由逗號(,)分隔的,在Github的data目錄下能下載到。我們可以使用以下語句來讀取這個數據集:


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


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


[[???????????????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]


暫時先不用考慮返回數據中出現的nan。


每一行的數據代表了房間的地區,是否是磚瓦結構,有多少臥室、洗手間以及價格的描述。


每個列代表了:


  • Home:房子的id

  • Price:房子的價格

  • Bedrooms:有多少個臥室

  • Bathroom:有多少個洗手間

  • Brick:是否是磚房

  • Neighborhood:地區


注意:NumPy數組中的數據必須是相同類型,比如布爾類型(bool)、整型(int),浮點型(float)以及字符串類型(string)。NumPy可以自動判斷數組內的對象類型,我們可以通過NumPy數組提供的dtype屬性來獲取類型。



04 正確讀取數據


回到之前的話題,上文發現顯示出來的數據里面有數據類型na(not available)和nan(not a number),前者表示讀取的數值是空的、不存在的,后者是因為數據類型轉換出錯。對于nan的出錯,我們可以用genfromtxt()來轉化數據類型。


  • dtype關鍵字要設定為‘U75’.表示每個值都是75byte的unicode。

  • skip_header關鍵字可以設置為整數,這個參數可以跳過文件開頭的對應的行數,然后再執行任何其他操作。


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



05 NumPy數組索引


NumPy支持list一樣的定位操作。舉例來說:


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


得到的結果是2。


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



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])語法代表選擇所有的行,但是列的索引是1的數據。那么就返回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的所有數據。



07 數組比較


NumPy強大的地方是數組或矩陣的比較,數據比較之后會產生boolean值。


舉例來說:


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


我們看到輸出的結果為:


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


我們再來看一個比較復雜的例子:


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進行比較,得到的就是false,true,false。print(matrix[second_column_25, :])代表的是返回true值的那一行數據-> [20,25,30]。


注意:上述的例子是單個條件,NumPy也允許我們使用條件符來拼接多個條件,其中“&”代表的是“且”,“|”代表的是“或”。比如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可以運用布爾值來替換值。


在數組中:


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]]


我們先創立數組matrix。將matrix的第二列和25比較,得到一個布爾值數組。second_column_25將matrix第二列值為25的替換為10。


替換有一個很棒的應用之處,就是替換那些空值。之前提到過NumPy中只能有一個數據類型。我們現在讀取一個字符矩陣,其中有一個值為空值。其中的空值我們很有必要把它替換成其他值,比如數據的平均值或者直接把他們刪除。這在大數據處理中很有必要。這里,我們演示把空值替換為“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 數據類型轉換


NumPy ndarray數據類型可以通過參數dtype 設定,而且可以使用astype轉換類型,在處理文件時這個會很實用,注意astype 調用會返回一個新的數組,也就是原始數據的一份復制。


比如,把String轉換成float。如下:


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


注意:上述例子中,如果字符串中包含非數字類型的時候,從string轉float就會報錯。



10 NumPy的統計計算方法


NumPy內置很多計算方法。其中最重要的統計方法有:


  • sum():計算數組元素的和;對于矩陣計算結果為一個一維數組,需要指定行或者列。

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

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


需要注意的是,用于這些統計方法計算的數值類型必須是int或者float。


數組例子:


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


矩陣例子:


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計算的是行的和,結果以列的形式展示。axis = 0計算的是列的和,結果以行的形式展示。


延伸學習


官方推薦教程是不錯的入門選擇:

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


關于作者:涂銘,阿里巴巴數據架構師,對大數據、自然語言處理、Python、Java相關技術有深入的研究,積累了豐富的實踐經驗。

劉祥,百煉智能自然語言處理專家,主要研究知識圖譜、NLG等前沿技術,參與機器自動寫作產品的研發與設計。

劉樹春,七牛云高級算法專家,七牛AI實驗室NLP&OCR方向負責人,主要負責七牛NLP以及OCR相關項目的研究與落地。


本文摘編自《Python自然語言處理實戰:核心技術與算法》,經出版方授權發布。


延伸閱讀《Python自然語言處理實戰

點擊上圖了解及購買

轉載請聯系微信:togo-maruko


推薦語:阿里巴巴、前明略數據和七牛云的高級專家和科學家撰寫,零基礎掌握NLP的核心技術、方法論和經典算法。



據統計,99%的大咖都完成了這個神操作



更多精彩


在公眾號后臺對話框輸入以下關鍵詞

查看更多優質內容!


PPT?|?報告?|?讀書?|?書單

大數據?|?揭秘?|?人工智能?|?AI

Python?|?機器學習?|?深度學習?|?神經網絡

可視化?|?區塊鏈?|?干貨?|?數學


猜你想看


  • 白領體檢異常率連年走高,這5本書教你怎樣科學"養生"

  • 跟著阿里大牛撈干貨:2019這5本書帶你玩轉大數據

  • 學AI哪家強?清華全球第1,Top5中有這3所中國高校

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



Q:?你在用NumPy嗎?都用來做什么?

歡迎留言與大家分享

覺得不錯,請把這篇文章分享給你的朋友

轉載 / 投稿請聯系:baiyu@hzbook.com

更多精彩,請在后臺點擊“歷史文章”查看

點擊閱讀原文,了解更多

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。