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,NASA用其處理一些本來使用C++,Fortran或Matlab等所做的任務。

數據類型


numpy 支持的數據類型比 Python 內置的類型要多很多,基本上可以和 C 語言的數據類型對應上,其中部分類型對應為Python 內置的類型。下表列舉了常用 NumPy 基本類型。
名稱描述
bool_布爾型數據類型(True 或者 False)
int_默認的整數類型(類似於 C 語言中的 long,int32 或 int64)
intc與 C 的 int 類型一樣,一般是 int32 或 int 64
intp用於索引的整數類型(類似於 C 的 ssize_t,一般情況下仍然是 int32 或 int64)
int8位元組(-128 to 127)
int16整數(-32768 to 32767)
int32整數(-2147483648 to 2147483647)
int64整數(-9223372036854775808 to 9223372036854775807)
uint8無符號整數(0 to 255)
uint16無符號整數(0 to 65535)
uint32無符號整數(0 to 4294967295)
uint64無符號整數(0 to 18446744073709551615)
float_float64 類型的簡寫
float16半精度浮點數,包括:1 個符號位,5 個指數位,10 個尾數位
float32單精度浮點數,包括:1 個符號位,8 個指數位,23 個尾數位
float64雙精度浮點數,包括:1 個符號位,11 個指數位,52 個尾數位
complex_complex128 類型的簡寫,即 128 位複數
complex64複數,表示雙 32 位浮點數(實數部分和虛數部分)
complex128複數,表示雙 64 位浮點數(實數部分和虛數部分)
numpy 的數值類型實際上是 dtype 對象的實例,並對應唯一的字元,包括 np.bool_,np.int32,np.float32,等等。

數組屬性


NumPy 數組的維數稱為秩(rank),秩就是軸的數量,即數組的維度,一維數組的秩為 1,二維數組的秩為 2,以此類推。
在 NumPy中,每一個線性的數組稱為是一個軸(axis),也就是維度(dimensions)。比如說,二維數組相當於是兩個一維數組,其中第一個一維數組中每個元素又是一個一維數組。所以一維數組就是 NumPy 中的軸(axis),第一個軸相當於是底層數組,第二個軸是底層數組裡的數組。而軸的數量——秩,就是數組的維數。
很多時候可以聲明 axis。axis=0,表示沿著第 0 軸進行操作,即對每一列進行操作;axis=1,表示沿著第1軸進行操作,即對每一行進行操作。
NumPy 的數組中比較重要 ndarray 對象屬性有:
屬性說明
ndarray.ndim秩,即軸的數量或維度的數量
ndarray.shape數組的維度,對於矩陣,n 行 m 列
ndarray.size數組元素的總個數,相當於 .shape 中 n*m 的值
ndarray.dtypendarray 對象的元素類型
ndarray.itemsizendarray 對象中每個元素的大小,以位元組為單位
ndarray.flagsndarray 對象的內存信息
ndarray.realndarray元素的實部
ndarray.imagndarray 元素的虛部
ndarray.data包含實際數組元素的緩衝區,由於一般通過數組的索引獲取元素,所以通常不需要使用這個屬性。
數組類型ndarray
NumPy provides an N-dimensional array type, the ndarray, which describes a collection of “items” of the same type.
NumPy提供了一個N維數組類型ndarray,它描述了相同類型的“items”的集合。
numpy
numpy
ndarray到底跟原生python列表的區別:
從圖中我們可以看出ndarray在存儲數據的時候,數據與數據的地址都是連續的,這樣就給使得批量操作數組元素時速度更快。
這是因為ndarray中的所有元素的類型都是相同的,而Python列表中的元素類型是任意的,所以ndarray在存儲元素時內存可以連續,而python原生list就只能通過定址方式找到下一個元素,這雖然也導致了在通用性能方面Numpy的ndarray不及Python原生list,但在科學計算中,Numpy的ndarray就可以省掉很多循環語句,代碼使用方面比Python原生list簡單的多。
numpy內置了并行運算功能,當系統有多個核心時,做某種計算時,numpy會自動做并行計算。
Numpy底層使用C語言編寫,內部解除了GIL(全局解釋器鎖),其對數組的操作速度不受Python解釋器的限制,效率遠高於純Python代碼。
ndarray的屬性:
numpy
numpy
生成數組的方法:
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])