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.dtype | ndarray 對象的元素類型 |
ndarray.itemsize | ndarray 對象中每個元素的大小,以位元組為單位 |
ndarray.flags | ndarray 對象的內存信息 |
ndarray.real | ndarray元素的實部 |
ndarray.imag | ndarray 元素的虛部 |
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
從圖中我們可以看出ndarray在存儲數據的時候,數據與數據的地址都是連續的,這樣就給使得批量操作數組元素時速度更快。
這是因為ndarray中的所有元素的類型都是相同的,而Python列表中的元素類型是任意的,所以ndarray在存儲元素時內存可以連續,而python原生list就只能通過定址方式找到下一個元素,這雖然也導致了在通用性能方面Numpy的ndarray不及Python原生list,但在科學計算中,Numpy的ndarray就可以省掉很多循環語句,代碼使用方面比Python原生list簡單的多。
numpy內置了并行運算功能,當系統有多個核心時,做某種計算時,numpy會自動做并行計算。
Numpy底層使用C語言編寫,內部解除了GIL(全局解釋器鎖),其對數組的操作速度不受Python解釋器的限制,效率遠高於純Python代碼。
ndarray的屬性:
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])