必威电竞|足球世界杯竞猜平台

numpy
來源:互聯網

NumPy(Numerical Python)是Python的一種開源的數值計算擴展。這種工具可用來存儲和處理大型矩陣,比Python自身的嵌套列表(nested list structure)結構要高效的多(該結構也可以用來表示矩陣(matrix)),支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。

軟件簡介

一個用python實現的科學計算,包括:

1、一個強大的N維數組對象Array;

2、比較成熟的(廣播)函數庫;

3、用于整合C/C++Fortran代碼的工具包;

4、實用的線性代數、傅里葉變換和隨機數生成函數。numpy和稀疏矩陣運算包SciPy配合使用更加方便。

NumPy(Numeric Python)提供了許多高級的數值編程工具,如:矩陣數據類型、矢量處理,以及精密的運算庫。專為進行嚴格的數字處理而產生。多為很多大型金融公司使用,以及核心的科學計算組織如:Lawrence Livermore,美國航空航天局用其處理一些本來使用C++FortranMATLAB等所做的任務。

開發歷史

NumPy的前身Numeric最初由Jim Hugunin創建,后由多位開發者貢獻代碼。

1995年,Python的特別興趣小組matrix-sig成立,旨在定義一個數組計算包,Python設計師Guido van Rossum也參與其中。Numeric由Jim Fulton實現,后由Jim Hugunin泛化,受到多種編程語言的影響。Numarray作為Numeric的替代品出現,但在處理小型數組時性能較慢。

2005年,Travis Oliphant將Numarray的特性整合到Numeric中,創建了NumPy。NumPy是開源軟件,也是NumFOCUS財政贊助項目。它是SciPy的一部分,但為了避免安裝大型SciPy包,NumPy被分離出來。對Python 3的支持是在2011年的NumPy版本1.5.0中添加的。

功能特色

綜述

NumPy針對Python的CPython參考實現,提供了多維數組、函數和運算符,使得數學算法的運行速度得到提升。NumPy的核心是其“ndarray”(n維數組)數據結構,這些數組是對內存的分塊視圖,所有元素必須是相同類型的。NumPy內置支持內存映射的ndarrays。NumPy的數組必須是對連續內存緩沖區的視圖,這導致了一些限制,例如向數組中插入或追加條目并不簡單。NumPy的操作通常在單個CPU上執行,但許多線性代數操作可以通過在CPU集群或專用硬件上執行來加速。科學Python生態系統中出現了幾種替代的數組實現,如Dask、TensorFlow或JAX。CuPy是由英偉達的CUDA框架加速的NumPy的“PnP替代品

數據類型

numpy 支持的數據類型比 Python 內置的類型要多很多,基本上可以和 C 語言的數據類型對應上,其中部分類型對應為Python 內置的類型。下表列舉了常用 NumPy 基本類型。

numpy 的數值類型實際上是 dtype 對象的實例,并對應唯一的字符,包括 NPbool_,np.int32,np.float32,等等。

數組屬性

NumPy 數組的維數稱為秩(rank),秩就是軸的數量,即數組的維度,一維數組的秩為 1,二維數組的秩為 2,以此類推。

在 NumPy中,每一個線性的數組稱為是一個軸(axis),也就是維度(dimensions)。比如說,二維數組相當于是兩個一維數組,其中第一個一維數組中每個元素又是一個一維數組。所以一維數組就是 NumPy 中的軸(axis),第一個軸相當于是底層數組,第二個軸是底層數組里的數組。而軸的數量——秩,就是數組的維數。

很多時候可以聲明 axis。axis=0,表示沿著第 0 軸進行操作,即對每一列進行操作;axis=1,表示沿著第1軸進行操作,即對每一行進行操作。

NumPy 的數組中比較重要 ndarray 對象屬性有:

數組類型ndarray。

NumPy提供了一個N維數組類型ndarray,它描述了相同類型的“items”的集合。

ndarray到底跟原生Python列表的區別:

從圖中我們可以看出ndarray在存儲數據的時候,數據與數據的地址都是連續的,這樣就給使得批量操作數組元素時速度更快。

這是因為ndarray中的所有元素的類型都是相同的,而Python列表中的元素類型是任意的,所以ndarray在存儲元素時內存可以連續,而python原生list就只能通過尋址方式找到下一個元素,這雖然也導致了在通用性能方面Numpy的ndarray不及Python原生list,但在科學計算中,Numpy的ndarray就可以省掉很多循環語句,代碼使用方面比Python原生list簡單的多。

numpy內置了并行運算功能,當系統有多個核心時,做某種計算時,numpy會自動做并行計算

Numpy底層使用c語言編寫,內部解除了GIL(全局解釋器鎖),其對數組的操作速度不受Python解釋器的限制,效率遠高于純Python代碼。

ndarray的屬性

生成數組的方法:

empty(shape[, dtype, order])

empty_like(a[, dtype, order, subok])

eye(N[, M, k, dtype, order])

identity(n[, dtype])

ones(shape[, dtype, order])

ones_like(a[, dtype, order, subok])

zeros(shape[, dtype, order])

zeros_like(a[, dtype, order, subok])

full(shape, fill_value[, dtype, order])

full_like(a, fill_value[, dtype, order, subok])

參考資料 >

生活家百科家居網