Các kiểu dữ liệu NumPy
Bài học 7 trên 18 trong khóa học Nền tảng NumPy của Coddy.
Chương trình phải cấp đủ bộ nhớ để mảng có kích thước cố định lưu trữ dữ liệu bên trong. Làm thế nào máy tính có thể xác định lượng bộ nhớ cần cấp?
Đây là lúc dtype phát huy tác dụng. Mỗi dtype có giá trị tối đa và tối thiểu, giúp máy xác định lượng bộ nhớ cần cấp cho mỗi ô trong mảng. Có nhiều kiểu dữ liệu của Numpy.
Các kiểu int là số nguyên n bit:
| Kiểu | Tối thiểu | Tối đa | Lũy thừa | Số bit |
| np.int8 | -128 | 127 | 2**8 | 8 |
| np.int16 | -32768 | 32767 | 2**16 | 16 |
| np.int32 | -2147483648 | 2147483647 | 2**32 | 32 |
| np.int64 | -9223372036854775808 | 9223372036854775807 | 2**64 | 64 |
Các kiểu float:
| Kiểu |
| np.float16 |
| np.float32 |
| np.float64 |
| np.float128 |
Mình không thể nêu các giá trị tối thiểu và tối đa vì chúng quá lớn.
Để tự xem giá trị tối đa và tối thiểu, bạn có thể dùng numpy.iinfo(<i>type</i>) cho các kiểu số nguyên và numpy.finfo(<i>dtype</i>) cho các kiểu số thực:
np.iinfo(np.int16).min
np.iinfo(np.int16).maxTại sao cần quan tâm đến dtype?
Giả sử ta có một mảng mà mỗi phần tử đại diện cho một căn phòng có người. Chương trình theo dõi số người trong mỗi phòng.
Hãy gán kiểu np.int8 cho mảng:
rooms = np.array([125, 3, 127], dtype=np.int8)Ở đây có 3 phòng. Mỗi phòng có một con số thuộc kiểu np.int8.
Phòng cuối cùng có 127 người!
Đây là giá trị tối đa của np.int8
Điều gì sẽ xảy ra nếu có thêm một người vào phòng đó?
rooms[-1] += 1
print(rooms)Đầu ra:
[ 125 3 -128]Hãy nhìn xem! Từ 127, con số chuyển thành -128. Đây không phải con số như mong đợi, vì vậy ta cần đảm bảo dùng đúng dtype cho nhu cầu của mình.
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Thử thách
DễTạo một hàm có tên dtype_converter, nhận số bit của kiểu dữ liệu và một giá trị.
Hàm trả về một mảng numpy 0 chiều (Hãy nhớ rằng mảng 0 chiều chỉ là một giá trị duy nhất được truyền vào np.array) với dtype được chỉ định và giá trị được tăng thêm một.
bits có thể là một trong các giá trị sau: 8, 16, 32, 64
Hãy chú ý kỹ đến đầu ra, một số test case sẽ bị tràn!
Tự làm thử
import numpy as np
def dtype_converter(bits, value):
try:
if bits == 8:
return np.array(value+1, dtype=np.int8)
# Write your code here
except:
print("Overflow:", value+1)
Tất cả bài học trong Nền tảng NumPy
2Tạo mảng nhiều chiều
Chiều cao hơnTìm hiểu về hình dạngĐiền bằng giá trị cố địnhCác kiểu dữ liệu NumPyKhoảngĐịnh hình lạiTự luyện tập: Trình biên dịch Python online