1. Các kiểu dữ liệu số trong Numpy

NumPy hỗ trợ nhiều kiểu dữ liệu liên quan đến số học so với các kiểu dữ liệu số có sẵn trong Python. Bảng sau đây cho thấy các kiểu dữ liệu số học khác nhau được xác định trong NumPy.

Kiểu dữ liệu Mô tả
bool_ Boolean (Đúng hoặc Sai) được lưu trữ dưới dạng byte
int_ Kiểu số nguyên mặc định (thường là int64 hoặc int32)
intc Kiểu số nguyên int C (thường là int32 hoặc int64)
intp Số nguyên được sử dụng để lập chỉ mục (giống như C ssize_t; thông thường là int32 hoặc int64)
int8 Byte (từ -128 đến 127)
int16 Integer (từ -32768 đến 32767)
int32 Integer (từ -2147483648 đến 2147483647)
int64 Integer (từ -9223372036854775808 đến 9223372036854775807)
uint8 Số nguyên không dấu (từ 0 đến 255)
uint16 Số nguyên không dấu (từ 0 đến 65535)
uint32

 

Số nguyên không dấu (từ 0 đến 4294967295)
uint64 Số nguyên không dấu (từ 0 đến 18446744073709551615)
float_ Là kiểu float64
float16 float: bit dấu, số mũ 5 bit, phần định trị 10 bit
float32 float: bit dấu, số mũ 8 bit, phần định trị 23 bit
float64 float: bit dấu, số mũ 11 bit, phần định trị 52 bit
complex_ Viết tắt cho complex128
complex64

 

Số phức, được biểu diễn bằng hai số thực 32 bit (thành phần thực và ảo)
complex128 Số phức, được biểu thị bằng hai số thực 64 bit (thành phần thực và ảo)

Các kiểu số trong NumPy phải được thông qua thuộc tính dtype (kiểu dữ liệu), mỗi kiểu dữ liệu sẽ có các đặc điểm riêng biệt và kích thước khác nhau. Trong numpy có một số các kiểu có sẵn như np.bool_, np.float32, v.v.

2. Đối tượng kiểu dữ liệu (dtype) trong Numpy

Đối tượng kiểu dữ liệu trong Numpy cũng sẽ miêu tả lại việc cấp phát bộ nhớ tương ứng cho một mảng. Việc cấp phát bộ nhớ cho mảng này sẽ dựa theo các yếu tố sau:

  • Kiểu dữ liệu sử dụng (số nguyên, đối tượng float hoặc Python)
  • Kích thước của dữ liệu sử dụng
  • Thứ tự Byte (little-endian hoặc big-endian)

Thứ tự byte được quyết định bằng cách thêm tiền tố ‘<‘ hoặc ‘>’ vào kiểu dữ liệu. Ký tự  ‘<‘ có nghĩa là mã hóa có giá trị nhỏ (ít quan trọng nhất được lưu trữ ở địa chỉ nhỏ nhất). Ký tự ‘>’ có nghĩa là mã hóa là big-endian (byte quan trọng nhất được lưu trữ ở địa chỉ nhỏ nhất).

Để tạo một đối tượng dtype ta cần sử dụng hàm np.dtype() như sau:

numpy.dtype(object, align, copy)

Trong đó:

  • object – Được chuyển đổi thành đối tượng kiểu dữ liệu
  • align – Nếu đúng, thêm phần đệm vào trường để làm cho trường tương tự như C-struct
  • copy – Tạo một bản sao mới của đối tượng dtype. Nếu sai, kết quả là tham chiếu đến đối tượng kiểu dữ liệu nội trang

3. Ví dụ tạo đối tượng kiểu dữ liệu (dtype) trong Numpy

Ví dụ 1

Ví dụ tạo một đối tượng dtype với kiểu np.int32 như sau:

import numpy as np 

dt = np.dtype(np.int32) 
print(dt)

Kết quả:

int32

Các kiểu dữ liệu: int8, int16, int32, int64 có thể được thay thế bằng chuỗi tương đương ‘i1’, ‘i2’, ‘i4’ như ví dụ bên dưới thay kiểu int32 bằng chuỗi “i4”

import numpy as np 

dt = np.dtype("i4") 
print(dt)

Kết quả:

int32

Ví dụ 2

Các ví dụ sau đây cho thấy việc sử dụng kiểu dữ liệu có cấu trúc. Ở đây, tên trường và kiểu dữ liệu vô hướng tương ứng sẽ được khai báo. Trường “name” là kiểu dữ liệu số nguyên np.int8

import numpy as np 

dt = np.dtype([('name',np.int8)]) 
print(dt)

Kết quả:

[('name', 'i1')]

Ví dụ tiếp theo, sử dụng đối tượng kiểu dữ liệu đã được định nghĩa cho một mảng np.array() thông qua thuộc tính dtype như sau:

import numpy as np 

dt = np.dtype([('name',np.int8)]) 
a = np.array([(10,),(20,),(30,)], dtype = dt) 
print(a)

Kết quả:

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

Truy cập nội dung có trong cột name

import numpy as np 

dt = np.dtype([('name',np.int8)]) 
a = np.array([(10,),(20,),(30,)], dtype = dt) 
print(a['name'])

Kết quả:

[10 20 30]

Ví dụ 3

Các ví dụ dưới đây khai báo đối tượng kiểu dữ liệu có cấu trúc student với trường ‘name’ kiểu chuỗi ký tự, ‘age’ kiểu số nguyên ‘point’kiểu số thực.

import numpy as np 

student = np.dtype([('name','S20'), ('age', 'i1'), ('point', 'f4')]) 
print (student)

Kết quả:

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

Loại dtype này được áp dụng cho đối tượng ndarray. Ví dụ dưới đây, khai báo một np.array() có kiểu dữ liệu dtype student

import numpy as np 

student = np.dtype([('name','S20'), ('age', 'i1'), ('point', 'f4')]) 
studentA = np.array([('Chu Minh Nam', 20, 9.5),('Tran Ngoc Ha', 20, 8.5)], dtype = student) 
print (studentA)

Kết quả

[(b'Chu Minh Nam', 20, 9.5) (b'Tran Ngoc Ha', 20, 8.5)]

Mỗi đối tượng kiểu dữ liệu được ta định nghĩa ra, chúng sẽ có một mã ký tự nhận dạng duy nhất:

  • ‘b’ – boolean
  •  ‘i’ – số nguyên có dấu
  • ‘u’ – số nguyên không dấu
  • ‘f’ – số thực
  • ‘c’ – số phức
  • ‘m’ – hẹn giờ
  • ‘M’ – ngày giờ
  • ‘O’ – Đối tượng trong Python
  • ‘S’, ‘a’ – Chuỗi ký tự
  • ‘U’ – Unicode
  • ‘V’ – dữ liệu thô