top
Loading...
NumPy 數據類型

NumPy 數據類型

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,等等。


數據類型對象 (dtype)

數據類型對象是用來描述與數組對應的內存區域如何使用,這依賴如下幾個方面:

  • 數據的類型(整數,浮點數或者 Python 對象)
  • 數據的大小(例如, 整數使用多少個字節存儲)
  • 數據的字節順序(小端法或大端法)
  • 在結構化類型的情況下,字段的名稱、每個字段的數據類型和每個字段所取的內存塊的部分
  • 如果數據類型是子數組,它的形狀和數據類型

字節順序是通過對數據類型預先設定"<"或">"來決定的。"<"意味著小端法(最小值存儲在最小的地址,即低位組放在最前面)。">"意味著大端法(最重要的字節存儲在最小的地址,即高位組放在最前面)。

dtype 對象是使用以下語法構造的:

numpy.dtype(object, align, copy)
  • object - 要轉換為的數據類型對象
  • align - 如果為 true,填充字段使其類似 C 的結構體。
  • copy - 復製 dtype 對象 ,如果為 false,則是對內置數據類型對象的引用

實例

接下來我們可以通過實例來理解。

實例 1

import numpy as np # 使用標量類型 dt = np.dtype(np.int32) print(dt)

輸出結果為:

int32

實例 2

import numpy as np # int8, int16, int32, int64 四種數據類型可以使用字符串 'i1', 'i2','i4','i8' 代替 dt = np.dtype('i4') print(dt)

輸出結果為:

int32

實例 3

import numpy as np # 字節順序標注 dt = np.dtype('>i4') print(dt)

輸出結果為:

int32

下面實例展示結構化數據類型的使用,類型字段和對應的實際類型將被創建。

實例 4

# 首先創建結構化數據類型 import numpy as np dt = np.dtype([('age',np.int8)]) print(dt)

輸出結果為:

[('age', 'i1')]

實例 5

# 將數據類型應用於 ndarray 對象 import numpy as np dt = np.dtype([('age',np.int8)]) a = np.array([(10,),(20,),(30,)], dtype = dt) print(a)

輸出結果為:

[(10,) (20,) (30,)]

實例 6

# 類型字段名可以用於存取實際的 age 列 import numpy as np dt = np.dtype([('age',np.int8)]) a = np.array([(10,),(20,),(30,)], dtype = dt) print(a['age'])

輸出結果為:

[10 20 30]

下面的示例定義一個結構化數據類型 student,包含字符串字段 name,整數字段 age,及浮點字段 marks,併將這個 dtype 應用到 adarray 對象。

實例 7

import numpy as np student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')]) print(student)

輸出結果為:

[('name', 'S20'), ('age', 'i1'), ('marks', '<f4')])

實例 8

import numpy as np student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')]) a = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = student) print(a)

輸出結果為:

[('abc', 21, 50.0), ('xyz', 18, 75.0)]

每個內建類型都有一個唯一定義它的字符代碼,如下:

字符 對應類型
b 布爾型
i (有符號) 整型
u 無符號整型 integer
f浮點型
c 復數浮點型
m timedelta(時間間隔)
M datetime(日期時間)
O (Python) 對象
S, a (byte-)字符串
U Unicode
V 原始數據 (void)
北斗有巢氏 有巢氏北斗