一、什麼是numpy.dtype
在深入探究numpy.dtype之前,我們先來了解一下數組的概念。在NumPy庫中,數組是多維數組的容器,其中所有元素都必須具有相同的數據類型(稱為dtype)。
而在numpy中,dtype表示數據類型的對象。一個Array的dtype描述了每個元素所佔的字節數以及與數組中元素相關的其他信息,如字節順序、數據格式和存儲布局等。
通過以下代碼我們可以創建一個具有int8數據類型的numpy數組:
import numpy as np
arr = np.array([1, 2, 3], dtype='int8')
print(arr.dtype)
在這個例子中,我們創建了一個三個元素的一維數組,並指定了數據類型為int8,即每個元素佔用一個字節。
二、dtype對象的屬性
dtype對象具有一系列屬性,用於描述該對象的元素類型。以下是一些常見的屬性:
1. dtype.name
該屬性返回dtype對象的名稱字符串,如’int8’。
arr = np.array([1, 2, 3], dtype='int8')
print(arr.dtype.name)
2. dtype.shape
該屬性返回dtype對象的形狀。在不同的dtype中,該屬性的意義是不同的。對於標量類型,它的形狀為 () ;對於數組類型,它的形狀為 數組的形狀,如 (2, 3)。
arr = np.array([1, 2, 3], dtype='int8')
print(arr.dtype.shape)
3. dtype.kind
該屬性返回dtype對象的字符代碼,表示其通用種類。可選的字符代碼包括:”b”(布爾)、”i”(符號整數)、”u”(無符號整數)、”f”(浮點數)、”c”(複數浮點數)等。
arr = np.array([1, 2, 3], dtype='int8')
print(arr.dtype.kind)
4. dtype.itemsize
該屬性返回類型碼字符的長度(以字節為單位)。例如,int8類型的項目大小為1個字節,float64類型的項目大小為8個字節。
arr = np.array([1, 2, 3], dtype='int8')
print(arr.dtype.itemsize)
三、dtype的類型編碼
在NumPy中,dtype的標準類型代碼用於標識各種數據類型。以下是一些常見的標準類型代碼:
類型代碼 | 說明 | 舉例 |
---|---|---|
‘b’ | 布爾型 | ‘bool’ |
‘i’ | 有符號整數型 | ‘int8’, ‘int16’, ‘int32’, ‘int64’ |
‘u’ | 無符號整數型 | ‘uint8’, ‘uint16’, ‘uint32’, ‘uint64’ |
‘f’ | 浮點型 | ‘float16’, ‘float32’, ‘float64’, ‘float128’ |
‘c’ | 複數浮點型 | ‘complex64’, ‘complex128’, ‘complex256’ |
‘S’ | 定長字符串型 | ‘S10’, ‘S20’, ‘S30’ |
‘U’ | Unicode字符串型 | ‘U10’, ‘U20’, ‘U30’ |
下面是幾個dtype類型編碼的例子:
# 創建一個uint16類型的數組
arr = np.zeros(3, dtype='uint16')
print(arr)
# 創建一個float32類型的數組
arr = np.ones(3, dtype='float32')
print(arr)
# 創建一個定長字符串類型的數組
arr = np.array(['hello', 'world'], dtype='S10')
print(arr)
# 創建一個Unicode字符串類型的數組
arr = np.array(['中文', 'english'], dtype='U10')
print(arr)
四、自定義dtype
除了標準類型代碼,NumPy還允許用戶創建自定義的dtype。自定義dtype可以包含複雜的數據結構,例如結構體。下面是一個自定義dtype的例子:
# 定義一個複合類型
dt = np.dtype([('name', 'S10'), ('age', 'int8'), ('gender', 'U1')])
# 創建一個數組
arr = np.array([('Tom', 18, 'M'), ('Mary', 20, 'F'), ('John', 23, 'M')], dtype=dt)
# 訪問元素
print(arr[0]['name'])
print(arr[1]['age'])
print(arr[2]['gender'])
在這個例子中,我們定義了一個複合類型,包含名字、年齡和性別三個字段,分別用10字節的字符串、1字節的整數和1個字符的Unicode字符串來表示。然後我們創建了一個由3個元素組成的數組,每個元素都是我們剛才定義的複合類型。我們可以通過訪問數組中的元素來獲取特定字段的值。
原創文章,作者:GTBJF,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/325349.html