Numpy,是python中的一個矩陣計算包,功能相似matlab的矩陣計算。Numpy的誕生彌補了下面提到的兩項的不足,numpy提供了兩種基本的對象:ndarray(N-dimensional array object)和ufunc(universal function object)。Ndarray(下文統一稱爲數組)是存儲單一數據類型的多維數組(同C語言數組直接保存數值),而ufunc則是可以對數組進行處理的函數。python
Numpy和pandas有什麼關係呢,numpy是作數據計算,pandas是作數據處理,pandas是在numpy的基礎上,處理的相似excel和數據庫的記錄,好比多了index和column。數據庫
那麼咱們爲何要學習numpy呢,一般狀況下咱們獲取數據的方式不一樣,獲得的數據的各式就會多種多樣,好比:文檔集合、圖像集合、聲音片斷集合等等。雖然這些數據存在明顯的異構性,但將他們都處理或者看作爲數字數組時,就會更易於理解和處理。舉個例子:數組
聲音片斷:能夠看做爲時間和強度的一位數組函數
圖像集合:能夠看作存儲不一樣區域像素值的二維數組工具
文本:能夠經過各類方式處理成數值數組形式的可分析數據。學習
所以,學會高效的存儲和操做數組是咱們進行數據科學學習的絕對基礎過程。雖然在某種程度上,Numpy數組與python內置的列表類型十分類似。可是隨着數組在維度上不斷變大,Numpy數組供了更強大的、更高效的存儲和數值操做。Numpy幾乎是整個python數據科學工具生態系統的核心。所以,無論咱們對數據科學的哪一個方面感興趣,多花點時間去學習高效實用Numpy,都是很值得且必要的。編碼
概念:簡單來講,numpy是python的一個科學計算包,包含了多維數組以及多位數組的操做。spa
核心:numpy的核心是ndarray對象,這個對象封裝了同質數據類型的n維數組設計
二、查看python中numpy的功能與內容excel
首先導入numpy
查看numpy的幫助文檔
也能夠經過兩個??查看更詳細的幫助文檔
2、python原生數組與numpy數組的區別與聯繫
一、對比Python數據類型和numpy數組作元素計算對比
若是想要將一個2-D數組 a 的每一個元素與長度相同的另一個數組 b 中相應位置的元素相乘,使用 Python 原生的數組實現以下:
須要使用列表流程:
可是若是使用numpy實現的話,能夠直接使用矢量化功能:
首先將導入numpy模塊
將原生數組轉化爲ndarray數組
而後就能夠直接進行運算了
矢量化代碼有不少優勢,其中包括:
要實現高效的數據驅動科學和計算,須要理解數據是如何被存儲和操做的。接下來的內容,咱們會對比python語言處理數組的過程,找出numpy的改進之處,這將是咱們理解numpy的基礎。
python用戶每每是被其易用性所吸引,其中一個易用指出就在於動態輸入。不一樣於C語言和Java,python在引用和定義變量以前不用提早指定變量類型。python變量的類型來源於咱們所賦的值的類型。咱們能夠這樣去理解:
在C語言中和python中,變量的存儲形式以下:
直觀來講,就至關於pythpn存儲數據的時候,須要耗費必定的內存去存儲和數據相關的信息。而這些信息是C語言的寫成的,而當咱們去修改變量的值時,至關於從新建立了一個變量,會在自動跑一遍C的底層代碼,將數據全部信息更新,而這些底層代碼很複雜,不須要咱們去寫,而是在python設計之初就已經所有寫好,咱們只要去執行變量賦值的操做就ok。這也是python好用的點之一。
那咱們如今就能夠看看變量賦值這個python功能背後的高效C語言的的僞代碼:
而上述說到的除了值的額外信息,都存儲在咱們上述圖片的PyObject_HEAD中。
二、列表和數組的區別於聯繫
列表和數組都是用來存儲一些列的元素的,不一樣點在於,數組這個容器要求當中的元素必須保持同一數據類型,且是數字,而列表就不同了,能夠容納多種不一樣的數據類型。
但咱們在開篇有說到,當咱們將數據處理成數值時,方便計算和其餘操做。這個時候,咱們須要的容器只要能夠存儲數值就能夠,使用列表則或耗費必定的空間去存儲每個元素的「其餘信息」,但當全部的元素都是數值時,這種存儲方式顯然不夠高效。
下面咱們舉個例子說明:
從代碼結果能夠看出,列表中每個元素的類型都是不一樣的,因此列表須要耗費必定的空間去存儲這些信息,當數據很大的時候這種方式顯然會拖慢運行的速度。
這樣,咱們就會發現,列表中每個元素對存儲着各自的類型信息,各自都是一個完整的對象。可是,容器中全部的元素都是一個類型時,顯然這種存儲方式不合適。但不得不說,這是咱們的動態數據類型必須付出的代價。
動態數據類型與python的array數組和Numpy的ndarray這些不可變數據類型的適用場景:
list等可變數據類型適用於須要不斷對原始數據進行修改的場景。修改時的操做在原始數據的自己進行。
array、ndarray這種不靈活的數據類型,適用於咱們想要保護原始數據不被修改的場景。當對原始數組進行修改操做時,會自動新建一個數組。