Kích thước float của Python tính bằng byte

NumPy hỗ trợ nhiều loại số hơn nhiều so với Python. Phần này hiển thị những cái có sẵn và cách sửa đổi kiểu dữ liệu của một mảng

Các kiểu nguyên thủy được hỗ trợ được gắn chặt với các kiểu trong C

loại gọn gàng

loại C

Sự miêu tả

bool

Boolean [Đúng hoặc Sai] được lưu dưới dạng byte

>>> np.array[[1, 2, 3], dtype='f']
array[[1.,  2.,  3.], dtype=float32]
1

nền tảng được xác định

>>> np.array[[1, 2, 3], dtype='f']
array[[1.,  2.,  3.], dtype=float32]
3

nền tảng được xác định

>>> np.array[[1, 2, 3], dtype='f']
array[[1.,  2.,  3.], dtype=float32]
5

nền tảng được xác định

>>> np.array[[1, 2, 3], dtype='f']
array[[1.,  2.,  3.], dtype=float32]
7

nền tảng được xác định

>>> np.array[[1, 2, 3], dtype='f']
array[[1.,  2.,  3.], dtype=float32]
9

nền tảng được xác định

>>> z.astype[float]                 
array[[0.,  1.,  2.]]
>>> np.int8[z]
array[[0, 1, 2], dtype=int8]
1

nền tảng được xác định

>>> z.astype[float]                 
array[[0.,  1.,  2.]]
>>> np.int8[z]
array[[0, 1, 2], dtype=int8]
3

nền tảng được xác định

>>> z.astype[float]                 
array[[0.,  1.,  2.]]
>>> np.int8[z]
array[[0, 1, 2], dtype=int8]
5

nền tảng được xác định

>>> z.astype[float]                 
array[[0.,  1.,  2.]]
>>> np.int8[z]
array[[0, 1, 2], dtype=int8]
7

nền tảng được xác định

>>> z.astype[float]                 
array[[0.,  1.,  2.]]
>>> np.int8[z]
array[[0, 1, 2], dtype=int8]
9

nền tảng được xác định

/

Phao nửa chính xác. bit dấu, 5 bit số mũ, 10 bit định trị

>>> z.dtype
dtype['uint8']
3

Phao chính xác đơn do nền tảng xác định. bit dấu thông thường, số mũ 8 bit, phần định trị 23 bit

>>> z.dtype
dtype['uint8']
5

Phao chính xác kép do nền tảng xác định. bit dấu thông thường, số mũ 11 bit, phần định trị 52 bit

>>> z.dtype
dtype['uint8']
7

Phao có độ chính xác mở rộng do nền tảng xác định

>>> z.dtype
dtype['uint8']
9

Số phức, được biểu thị bằng hai số float có độ chính xác đơn [các thành phần thực và ảo]

>>> d = np.dtype[int]
>>> d 
dtype['int32']

>>> np.issubdtype[d, np.integer]
True

>>> np.issubdtype[d, np.floating]
False
1

Số phức, được biểu thị bằng hai số float có độ chính xác kép [thành phần thực và ảo]

>>> d = np.dtype[int]
>>> d 
dtype['int32']

>>> np.issubdtype[d, np.integer]
True

>>> np.issubdtype[d, np.floating]
False
3

Số phức, được biểu thị bằng hai số float có độ chính xác mở rộng [các thành phần thực và ảo]

Vì nhiều trong số này có các định nghĩa phụ thuộc vào nền tảng nên một tập hợp các bí danh có kích thước cố định được cung cấp [Xem phần ]

Các kiểu số NumPy là các thể hiện của các đối tượng

>>> d = np.dtype[int]
>>> d 
dtype['int32']

>>> np.issubdtype[d, np.integer]
True

>>> np.issubdtype[d, np.floating]
False
4 [kiểu dữ liệu], mỗi đối tượng có các đặc điểm riêng. Sau khi bạn đã nhập NumPy bằng cách sử dụng
>>> d = np.dtype[int]
>>> d 
dtype['int32']

>>> np.issubdtype[d, np.integer]
True

>>> np.issubdtype[d, np.floating]
False
5, các loại dtype có sẵn là
>>> d = np.dtype[int]
>>> d 
dtype['int32']

>>> np.issubdtype[d, np.integer]
True

>>> np.issubdtype[d, np.floating]
False
6,
>>> d = np.dtype[int]
>>> d 
dtype['int32']

>>> np.issubdtype[d, np.integer]
True

>>> np.issubdtype[d, np.floating]
False
7, v.v.

Các loại nâng cao, không được liệt kê ở trên, được khám phá trong phần

Có 5 kiểu số cơ bản biểu diễn boolean [bool], số nguyên [int], số nguyên không dấu [uint] dấu phẩy động [float] và số phức. Những người có số trong tên của họ cho biết kích thước bit của loại [i. e. cần bao nhiêu bit để biểu diễn một giá trị trong bộ nhớ]. Một số loại, chẳng hạn như

>>> np.array[[1, 2, 3], dtype='f']
array[[1.,  2.,  3.], dtype=float32]
9 và
>>> d = np.dtype[int]
>>> d 
dtype['int32']

>>> np.issubdtype[d, np.integer]
True

>>> np.issubdtype[d, np.floating]
False
9, có kích thước bit khác nhau, tùy thuộc vào nền tảng [e. g. 32-bit so với. máy 64-bit]. Điều này nên được tính đến khi giao tiếp với mã cấp thấp [chẳng hạn như C hoặc Fortran] nơi xử lý bộ nhớ thô

Kiểu dữ liệu có thể được sử dụng làm hàm để chuyển đổi số python thành vô hướng mảng [xem phần vô hướng mảng để được giải thích], chuỗi số python thành mảng thuộc loại đó hoặc làm đối số cho từ khóa dtype mà nhiều hàm hoặc phương thức numpy chấp nhận. Vài ví dụ

>>> x = np.float32[1.0]
>>> x
1.0
>>> y = np.int_[[1,2,4]]
>>> y
array[[1, 2, 4]]
>>> z = np.arange[3, dtype=np.uint8]
>>> z
array[[0, 1, 2], dtype=uint8]

Các loại mảng cũng có thể được gọi bằng mã ký tự, chủ yếu để duy trì khả năng tương thích ngược với các gói cũ hơn như Numeric. Một số tài liệu vẫn có thể đề cập đến những điều này, ví dụ

>>> np.array[[1, 2, 3], dtype='f']
array[[1.,  2.,  3.], dtype=float32]

Chúng tôi khuyên bạn nên sử dụng các đối tượng dtype để thay thế

Để chuyển đổi kiểu của một mảng, hãy sử dụng. astype[] [được ưu tiên] hoặc chính loại đó là một hàm. Ví dụ

>>> z.astype[float]                 
array[[0.,  1.,  2.]]
>>> np.int8[z]
array[[0, 1, 2], dtype=int8]

Lưu ý rằng, ở trên, chúng tôi sử dụng đối tượng float Python làm dtype. NumPy biết rằng

>>> np.array[[1, 2, 3], dtype='f']
array[[1.,  2.,  3.], dtype=float32]
9 đề cập đến
>>> np.power[100, 8, dtype=np.int64]
10000000000000000
>>> np.power[100, 8, dtype=np.int32]
1874919424
1, bool có nghĩa là
>>> d = np.dtype[int]
>>> d 
dtype['int32']

>>> np.issubdtype[d, np.integer]
True

>>> np.issubdtype[d, np.floating]
False
6, rằng
>>> z.dtype
dtype['uint8']
3 là
>>> np.power[100, 8, dtype=np.int64]
10000000000000000
>>> np.power[100, 8, dtype=np.int32]
1874919424
5 và
>>> np.power[100, 8, dtype=np.int64]
10000000000000000
>>> np.power[100, 8, dtype=np.int32]
1874919424
6 là
>>> np.power[100, 8, dtype=np.int64]
10000000000000000
>>> np.power[100, 8, dtype=np.int32]
1874919424
7. Các kiểu dữ liệu khác không có Python tương đương

Để xác định loại mảng, hãy xem thuộc tính dtype

>>> z.dtype
dtype['uint8']

các đối tượng dtype cũng chứa thông tin về loại, chẳng hạn như độ rộng bit và thứ tự byte của nó. Kiểu dữ liệu cũng có thể được sử dụng gián tiếp để truy vấn các thuộc tính của kiểu, chẳng hạn như đó có phải là số nguyên hay không

>>> d = np.dtype[int]
>>> d 
dtype['int32']

>>> np.issubdtype[d, np.integer]
True

>>> np.issubdtype[d, np.floating]
False

Mảng vô hướng

NumPy thường trả về các phần tử của mảng dưới dạng vô hướng mảng [một vô hướng với một dtype được liên kết]. Hàm vô hướng mảng khác với hàm vô hướng Python, nhưng phần lớn chúng có thể được sử dụng thay thế cho nhau [ngoại lệ chính là dành cho các phiên bản Python cũ hơn v2. x, trong đó các đại lượng mảng số nguyên không thể đóng vai trò là chỉ số cho danh sách và bộ dữ liệu]. Có một số trường hợp ngoại lệ, chẳng hạn như khi mã yêu cầu các thuộc tính rất cụ thể của một đại lượng vô hướng hoặc khi nó kiểm tra cụ thể xem một giá trị có phải là đại lượng vô hướng trong Python hay không. Nói chung, các sự cố có thể dễ dàng khắc phục bằng cách chuyển đổi rõ ràng các hàm vô hướng mảng thành hàm vô hướng Python, sử dụng hàm loại Python tương ứng [e. g. ,

>>> np.array[[1, 2, 3], dtype='f']
array[[1.,  2.,  3.], dtype=float32]
9,
>>> z.dtype
dtype['uint8']
3,
>>> np.power[100, 8, dtype=np.int64]
10000000000000000
>>> np.power[100, 8, dtype=np.int32]
1874919424
6,
>>> np.iinfo[int] # Bounds of the default integer on this system.
iinfo[min=-9223372036854775808, max=9223372036854775807, dtype=int64]
>>> np.iinfo[np.int32] # Bounds of a 32-bit integer
iinfo[min=-2147483648, max=2147483647, dtype=int32]
>>> np.iinfo[np.int64] # Bounds of a 64-bit integer
iinfo[min=-9223372036854775808, max=9223372036854775807, dtype=int64]
1,
>>> np.iinfo[int] # Bounds of the default integer on this system.
iinfo[min=-9223372036854775808, max=9223372036854775807, dtype=int64]
>>> np.iinfo[np.int32] # Bounds of a 32-bit integer
iinfo[min=-2147483648, max=2147483647, dtype=int32]
>>> np.iinfo[np.int64] # Bounds of a 64-bit integer
iinfo[min=-9223372036854775808, max=9223372036854775807, dtype=int64]
2]

Ưu điểm chính của việc sử dụng mảng vô hướng là chúng bảo toàn kiểu mảng [Python có thể không có sẵn kiểu vô hướng phù hợp, e. g.

>>> np.iinfo[int] # Bounds of the default integer on this system.
iinfo[min=-9223372036854775808, max=9223372036854775807, dtype=int64]
>>> np.iinfo[np.int32] # Bounds of a 32-bit integer
iinfo[min=-2147483648, max=2147483647, dtype=int32]
>>> np.iinfo[np.int64] # Bounds of a 64-bit integer
iinfo[min=-9223372036854775808, max=9223372036854775807, dtype=int64]
3]. Do đó, việc sử dụng mảng vô hướng đảm bảo hành vi giống hệt nhau giữa mảng và vô hướng, bất kể giá trị có nằm trong mảng hay không. Vô hướng NumPy cũng có nhiều phương thức giống như mảng

Lỗi tràn

Kích thước cố định của các loại số NumPy có thể gây ra lỗi tràn khi một giá trị yêu cầu nhiều bộ nhớ hơn khả dụng trong loại dữ liệu. Ví dụ: đánh giá đúng

>>> np.iinfo[int] # Bounds of the default integer on this system.
iinfo[min=-9223372036854775808, max=9223372036854775807, dtype=int64]
>>> np.iinfo[np.int32] # Bounds of a 32-bit integer
iinfo[min=-2147483648, max=2147483647, dtype=int32]
>>> np.iinfo[np.int64] # Bounds of a 64-bit integer
iinfo[min=-9223372036854775808, max=9223372036854775807, dtype=int64]
5 cho số nguyên 64 bit, nhưng đưa ra 1874919424 [không chính xác] cho số nguyên 32 bit

>>> np.power[100, 8, dtype=np.int64]
10000000000000000
>>> np.power[100, 8, dtype=np.int32]
1874919424

Hành vi của các loại số nguyên NumPy và Python khác nhau đáng kể khi tràn số nguyên và có thể gây nhầm lẫn cho người dùng mong đợi các số nguyên NumPy hoạt động tương tự như

>>> np.array[[1, 2, 3], dtype='f']
array[[1.,  2.,  3.], dtype=float32]
9 của Python. Không giống như NumPy, kích thước của
>>> np.array[[1, 2, 3], dtype='f']
array[[1.,  2.,  3.], dtype=float32]
9 của Python rất linh hoạt. Điều này có nghĩa là số nguyên Python có thể mở rộng để chứa bất kỳ số nguyên nào và sẽ không bị tràn

NumPy cung cấp và để xác minh các giá trị tối thiểu hoặc tối đa của các giá trị số nguyên và dấu phẩy động NumPy tương ứng

>>> np.iinfo[int] # Bounds of the default integer on this system.
iinfo[min=-9223372036854775808, max=9223372036854775807, dtype=int64]
>>> np.iinfo[np.int32] # Bounds of a 32-bit integer
iinfo[min=-2147483648, max=2147483647, dtype=int32]
>>> np.iinfo[np.int64] # Bounds of a 64-bit integer
iinfo[min=-9223372036854775808, max=9223372036854775807, dtype=int64]

Nếu số nguyên 64 bit vẫn còn quá nhỏ, kết quả có thể được chuyển thành số dấu phẩy động. Các số dấu phẩy động cung cấp phạm vi giá trị có thể lớn hơn nhưng không chính xác

>>> np.power[100, 100, dtype=np.int64] # Incorrect even with 64-bit int
0
>>> np.power[100, 100, dtype=np.float64]
1e+200

Độ chính xác mở rộng

Số dấu phẩy động của Python thường là số dấu phẩy động 64-bit, gần tương đương với

>>> np.power[100, 100, dtype=np.int64] # Incorrect even with 64-bit int
0
>>> np.power[100, 100, dtype=np.float64]
1e+200
0. Trong một số tình huống bất thường, có thể hữu ích khi sử dụng các số dấu phẩy động với độ chính xác cao hơn. Điều này có khả thi trong numpy hay không tùy thuộc vào phần cứng và môi trường phát triển. cụ thể, các máy x86 cung cấp dấu phẩy động phần cứng với độ chính xác 80 bit và trong khi hầu hết các trình biên dịch C cung cấp điều này dưới dạng loại
>>> z.dtype
dtype['uint8']
7 của chúng, thì MSVC [tiêu chuẩn cho các bản dựng Windows] làm cho
>>> z.dtype
dtype['uint8']
7 giống với
>>> z.dtype
dtype['uint8']
5 [64 bit]. NumPy làm cho
>>> z.dtype
dtype['uint8']
7 của trình biên dịch có sẵn dưới dạng
>>> np.power[100, 100, dtype=np.int64] # Incorrect even with 64-bit int
0
>>> np.power[100, 100, dtype=np.float64]
1e+200
5 [và
>>> np.power[100, 100, dtype=np.int64] # Incorrect even with 64-bit int
0
>>> np.power[100, 100, dtype=np.float64]
1e+200
6 cho các số phức]. Bạn có thể tìm hiểu những gì numpy của bạn cung cấp với
>>> np.power[100, 100, dtype=np.int64] # Incorrect even with 64-bit int
0
>>> np.power[100, 100, dtype=np.float64]
1e+200
7

NumPy không cung cấp một dtype với độ chính xác cao hơn

>>> z.dtype
dtype['uint8']
7 của C;

Để căn chỉnh bộ nhớ hiệu quả,

>>> np.power[100, 100, dtype=np.int64] # Incorrect even with 64-bit int
0
>>> np.power[100, 100, dtype=np.float64]
1e+200
5 thường được lưu trữ đệm bằng 0 bit, hoặc là 96 hoặc 128 bit. Cái nào hiệu quả hơn phụ thuộc vào phần cứng và môi trường phát triển; .
>>> np.power[100, 100, dtype=np.int64] # Incorrect even with 64-bit int
0
>>> np.power[100, 100, dtype=np.float64]
1e+200
5 được đệm theo mặc định của hệ thống; . Bất chấp tên gọi, numpy.bool_2 và numpy.bool_3 chỉ cung cấp độ chính xác tương đương với
>>> np.power[100, 100, dtype=np.int64] # Incorrect even with 64-bit int
0
>>> np.power[100, 100, dtype=np.float64]
1e+200
5, tức là 80 bit trên hầu hết các máy x86 và 64 bit trong các bản dựng Windows tiêu chuẩn

Được cảnh báo rằng ngay cả khi

>>> np.power[100, 100, dtype=np.int64] # Incorrect even with 64-bit int
0
>>> np.power[100, 100, dtype=np.float64]
1e+200
5 cung cấp độ chính xác cao hơn python
>>> z.dtype
dtype['uint8']
3, thì rất dễ mất đi độ chính xác bổ sung đó, vì python thường buộc các giá trị phải chuyển qua
>>> z.dtype
dtype['uint8']
3. Ví dụ: toán tử định dạng bool0 yêu cầu các đối số của nó phải được chuyển đổi thành các loại python tiêu chuẩn và do đó không thể duy trì độ chính xác mở rộng ngay cả khi yêu cầu nhiều chữ số thập phân. Có thể hữu ích khi kiểm tra mã của bạn với giá trị bool1

Python float 32 hay 64

Số dấu phẩy động của Python thường là 64-bit số dấu phẩy động, gần tương đương với np. phao64. Trong một số tình huống bất thường, có thể hữu ích khi sử dụng các số dấu phẩy động với độ chính xác cao hơn.

Phao Python lớn cỡ nào?

Các giá trị float của Python được biểu thị dưới dạng Các giá trị có độ chính xác kép 64 bit . 1. 8 X 10308 là giá trị lớn nhất gần đúng cho bất kỳ số dấu phẩy động nào.

Python có nổi 64 không

Các giá trị float của Python được biểu thị dưới dạng các giá trị có độ chính xác kép 64 bit . Giá trị tối đa của bất kỳ số dấu phẩy động nào có thể là khoảng 1. 8x10308. Bất kỳ số nào lớn hơn số này sẽ được biểu thị bằng chuỗi inf trong Python.

Làm thế nào là float chỉ có 4 byte?

Các giá trị có độ chính xác đơn với loại float có 4 byte, bao gồm một bit dấu, một số mũ nhị phân vượt quá 127 8 bit và một phần định trị 23 bit. The mantissa represents a number between 1.0 and 2.0. Since the high-order bit of the mantissa is always 1, it is not stored in the number.

Chủ Đề