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’ là kiểu chuỗi ký tự, ‘age’ là kiểu số nguyên và ‘point’ là 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 là 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ô