Menu
CoddyTech

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ểuTối thiểuTối đaLũy thừaSố bit
np.int8-1281272**88
np.int16-32768327672**1616
np.int32-214748364821474836472**3232
np.int64-922337203685477580892233720368547758072**6464

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).max

Tạ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.

quiz iconTự kiểm tra

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 độ.

quiz iconTự kiểm tra

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 độ.

quiz iconTự kiểm tra

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 độ.

challenge icon

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

Tự luyện tập: Trình biên dịch Python online