1. 程式人生 > 其它 >Python numpy 入門系列 02 資料型別

Python numpy 入門系列 02 資料型別

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)

資料型別物件(numpy.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 應用到 ndarray 物件。

例項 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)

 

 

 

REF

https://www.runoob.com/numpy/numpy-dtype.html