Python學習之Numpy速成記——基礎篇(上)

Python Fortran C語言 約瑟夫·傅里葉 算法 醫數思維雲課堂 2019-04-15
Python學習之Numpy速成記——基礎篇(上)

基本功能

· 快速高效的多維數組對象ndarray

· 用於對數組執行元素級計算以及直接對數組執行數學運算的函數

· 用於讀寫硬盤上基於數組的數據集的工具

· 線性代數運算、傅里葉變換,以及隨機數生成

· 用於將C、C++、Fortran代碼集成到Python的工具

· 除了為Python提供快速的數組處理能力,NumPy在數據分析方面還有另外一個主要作用,即作為在算法之間傳遞數據的容器。

· 標準Python的列表(list)中,元素本質是對象。如:L = [1, 2, 3],需要3個指針和三個整數對象,對於數值運算比較浪費內存和CPU。

因此,Numpy提供了ndarray(N-dimensional array object)對象:存儲單一數據類型的多維數組。

(一)基礎知識

1.NumPy 數組

(1) 使用NumPy中的arange()函數來創建包含0~n 的整數的NumPy數組。

代碼中的arange函數前面有一個前綴numpy,表明該函數是從NumPy模塊導入的。

test_1=np.arange(5)
print(test_1)

(2) NumPy數組的下標從0開始的。使用dtype()獲得數據類型

print(test_1.dtype)

(3) 數組的shape屬性返回一個元組(tuple),元組中的元素即為NumPy數組每一個維度上的大小。上面例子中的數組是一維的,因此元組中只有一個元素。

print(test_1.shape)

(4) 創建指定長度的全0數組(zeros),全1數組(ones),沒有任何具體數值的數組(empty),創建單位矩陣eye()

print(np.zeros(3))
print(np.ones([2,3]))
print(np.empty([3,3],dtype=int))
print(np.eye(3,3))

參數:

shape : 整數或者整型元組定義返回數組的形狀;

dtype : 數據類型,可選定義返回數組的類型。

order : {'C', 'F'}, 可選規定返回數組元素在內存的存儲順序:C(C語言)-rowmajor;F(Fortran)column-major。

2.創建多維數組

(1)創建一個多維數組; 顯示該數組的維度。

arange函數創建的數組作為列表元素,把這個列表作為參數傳給array()函數,從而創建了一個2×2的數組。

test_2=np.array([np.arange(2), np.arange(2)])
print(test_2)
print(test_2.shape)

(2)選取數組元素:對於數組a,只需要用a[m,n]選取各數組元素,其中m和n為元素下標,對應的位置如下表所示。

Python學習之Numpy速成記——基礎篇(上)

a=np.array([[1,2], [3,4]])
print(a)
print(a[0,0])
print(a[0,1])

3.NumPy 數據類型

Python支持的數據類型有整型、浮點型以及複數型,但這些類型不足以滿足科學計算的需求,因此NumPy添加了很多其他的數據類型。

在實際應用中,我們需要不同精度的數據類型,它們佔用的內存空間也是不同的。

在NumPy中,大部分數據類型名是以數字結尾的,這個數字表示其在內存中佔用的位數。下面的表格(整理自NumPy用戶手冊)列出了NumPy中支持的數據類型。

Python學習之Numpy速成記——基礎篇(上)

(1)每一種數據類型均有對應的類型轉換函數:

float64(42)
int8(42.0)
bool(42)
bool(0)
bool(42.0)
float(False)
float(True)
print(np.float64(42))
print(np.int8(42.0))
print(bool(42))

(2)在NumPy中,許多函數的參數中可以指定數據類型,通常這個參數是可選的:

print(np.arange(7, dtype=np.uint16))
print(np.arange(7, dtype=np.float64))

(3)複數是不能轉換為整數的

np.complex(2,1)
np.int8(np.complex(2,1))

4.數據類型對象

(1)數據類型對象是numpy.dtype類的實例。如前所述,NumPy數組是有數據類的,更確切地說,NumPy數組中的每一個元素均為相同的數據類型。

數據類型對象可以給出單個數組元素在內存中佔用的字節數,即dtype類的itemsize屬性:a.dtype.itemsize

(2)NumPy可以使用字符編碼來表示數據類型,這是為了兼容NumPy的前身Numeric。

應該優先使用dtype對象來表示數據類型,而不是這些字符編碼。

Python學習之Numpy速成記——基礎篇(上)

 np.arange(7, dtype='f')
np.arange(7, dtype='D')

(3)完整的NumPy數據類型列表可以在sctypeDict.keys()中找到:

(4)獲取數據類型的字符編碼:

t = np.dtype('Float64')
t.char

(5)創建自定義數據類型:

自定義數據類型是一種異構數據類型,可以當做用來記錄電子表格或數據庫中一行數據的結構。

作為示例,我們將創建一個存儲商店庫存信息的數據類型。

其中,我們用一個長度為40個字符的字符串來記錄商品名稱,用一個32位的整數來記錄商品的庫存數量,最後用一個32位的單精度浮點數來記錄商品價格。

下面是具體的步驟。

t = np.dtype([('name', np.str),('numitems', np.int32),('price',np.float32)])
print(t)
t['name']

相關推薦

推薦中...