跟著A米學Python:100堂課之第二十三課「初識numpy」

我們二月份通過二十二節課,初步學習了Python的基礎知識,並且結合基礎知識舉了兩個處理Excel文件的簡單例子。當然,我們處理電子錶

EXcel文件採用的是Python的基礎語法結合Excel處理的幾個第三方庫,包括:openpyxl,xlrd,xlwt。我自己測試,發現openpyxl打開Excel文檔的時間特別長,xlrd相對來說快一點,但是卻無法兼容新版本的Excel文件。

那麼有沒有一些更好的第三方庫來解決日常工作中的數據分析難題呢?答案很顯然是有的,所以從今天開始,我將和大家一起來學習一下Python中兩個大名鼎鼎的第三方庫:Numpy和Pandas,特別是Pandas,江湖人稱“潘大師”,可不是浪得虛名!

由於Pandas和Numpy緊密相關,所以我們需要提前瞭解Numpy,只有對Numpy有了初步的認識,你對Pandas的應用才能信手拈來,熟能生巧!

Numpy是什麼?Numeric Python的簡稱,它提供了非常多的高級數據編程工具,其核心是N維數據對象Array,底層代碼用C語言編寫,所以速度非常快。作為普通辦公室人員,你不需要深入瞭解關於Numpy的太多知識,要不然你可能會出現網上的通病:收藏了一大堆,從來沒認真通讀過!

為了幫助大家快速對Numpy有一個感性的認識,我們今天結合anaconda來進行解讀,關於anaconda,我們這裡不做解讀,需要了解的同學自己百度或者頭條搜索就會知道。和Python的普通數據結構不同,Numpy的運算主要基於數組和矩陣,我們今天就來探討這兩個概念。

一、Numpy中的數組:我們通過anaconda來直觀的演示Numpy的數組的概念。和使用其他第三方庫一樣,我們首先導入numpy,一般地,Python的編程中習慣用“import numpy as np”,這裡的as np其實是Python的一種非常方便的寫法,便於簡化第三方庫的後續代碼引用。

跟著A米學Python:100堂課之第二十三課「初識numpy」

以上例子我們通過np.array創建了一個數組names,並在數組中放入了初始化的值,然後通過names直接打印出來這個數組,和Pycharm不同,在anaconda中,我們不需要用print,默認就是print,所以我們打入names後點擊運行就會打印出數組names。

numpy中存放的主要是類型相同的數據,最主要的應用是數組應用,也就是nparray,numpy中的數組具有很多不同的特性:

跟著A米學Python:100堂課之第二十三課「初識numpy」

1、ndim:這個可以很直觀認識,也就是我們經常意義上說的一維數組或者二維數組

跟著A米學Python:100堂課之第二十三課「初識numpy」

我們創建的數組a就是一維數組array([1,2,3,4]),而b就是一個二維數組。

2、shape:這個可以簡單理解為一個數組有多少行多少列?

跟著A米學Python:100堂課之第二十三課「初識numpy」

可以看出:a數組執行a.shape後的結果為(4,),這個代表一維數組,有4列,行數就沒有體現出來;b數組執行b.shape後結果為(2,4),表示b數組有2行4列,就像我們上圖看到的一樣,非常的直觀明瞭。
3、size:這個就是用來看看數組有多少個元素:

跟著A米學Python:100堂課之第二十三課「初識numpy」

4、dtype:數組元素的數據類型:

跟著A米學Python:100堂課之第二十三課「初識numpy」

為了說明元素的數據類型,我們對數組b進行重新賦值,在賦值的時候我們僅僅改變了其中兩個數字,變成浮點數,可以看出:數組的數據類型必須是統一的,即使只有一個是浮點數,賦值後其他元素也默認為浮點數。

當然numpy還有其他的特性,我們不再這裡詳細講述,日後大家用到了自然就會了。

二、一些常用的numpy數組:我們在日常應用中,經常會需要預先生成一些數組,numpy中主要有3種經常使用的bulit-in數組,我們下面來逐個熟悉一下:

1、生成全部是0的數組:在numpy中,用np.zeros來生成這樣子的數組:

跟著A米學Python:100堂課之第二十三課「初識numpy」

我們通過zeros生成一個2維的3行4列的數組。

2、生成全部是1的數組:我們用np.ones來生成一個3維4行5列的數組。

跟著A米學Python:100堂課之第二十三課「初識numpy」

3、生成全部為空的數組:我們用np.empty來生成全部為空的數組,生成的數組元素本例顯示為0,但其實有時候不存粹顯示為0,而是顯示了類似於這樣子的科學計數法3.93603959e-262,其實這個數也是無限於接近0:

跟著A米學Python:100堂課之第二十三課「初識numpy」

4、生成對角線數字全部為1的數組:這個我們用np.eye來實現:

跟著A米學Python:100堂課之第二十三課「初識numpy」

可以看到:除了對角線的數字為1外,其他數字全部為0.

三、numpy數組的運算:數組的運算和我們普通的思維中的運算不太一樣,如果有學過矩陣的同學應該會了解,下面我們來舉幾個例子說明:

1、數組的加減法運算:進行加減法運算的兩個數組,必須緯度、行、列一致方可進行加減法,加減法運算時對應的位置數字分別進行加減,如下圖:

跟著A米學Python:100堂課之第二十三課「初識numpy」

本例中,我們新設置了兩個數組,當進行加減運算的時候,數組對應的位置的數字進行了運算,速度非常快,結果也非常簡單明瞭,這個也是numpy的特性。

2、數組的乘除法運算:運算規則和加減法一樣,如下圖:

跟著A米學Python:100堂課之第二十三課「初識numpy」

為了幫助大家理解,我舉的例子是一維數組,二維數組的運算其實也一樣:

跟著A米學Python:100堂課之第二十三課「初識numpy」

如果你第一次接觸numpy,你可能有有一點點懵圈,但是這個非常正常,就像我們很多人學了大學的高等數學,但是實際上畢業後很多人並沒有使用高等數學來應用於工作中,但是當有一天你真的需要用到這個知識,你重新複習一下很快就會了。

我們為什麼要學習numpy,其實很大原因是為了學習後面的pandas用於日常工作中的數據處理,特別是Excel的數據加工處理和很多圖像和音頻的處理。只有瞭解了numpy的數據特性和運算函數,你才能熟悉掌握pandas。而對絕大部分人來說,學習Python並不一定要從事編程職業,但是學會了基礎的Python知識,加上numpy和pandas,已經可以使你在日常的職場中領先別人好幾個身位,特別是如果你工作中需要經常重複性處理很多的文件,你更加需要認知學習這兩個庫的操作。

為了不一下子讓人覺得特別疲憊,我們今天對numpy的介紹就到這裡,下一節課再進一步深入。如果你也喜歡Python,喜歡AI時代下面的編程,想在自己的職場取得更好的成績,想自己的人生擁有更多的時間和財富,你可以關注我的頭條號,我們一起學習,一起探討。我也是新人,我也不斷在學習,這是我的學習筆記,我要至少學習100堂這樣子的課程。如果你願意,我們一起來努力吧!想了解我們之前的學習筆記,請點擊之前的課程。


分享到:


相關文章: