Làm thế nào tôi có thể đại diện cho một số lượng vô hạn trong python? Cho dù bạn nhập số nào trong chương trình, không có số nào lớn hơn số đại diện vô cực này.
Làm thế nào tôi có thể đại diện cho một số lượng vô hạn trong python? Cho dù bạn nhập số nào trong chương trình, không có số nào lớn hơn số đại diện vô cực này.
Câu trả lời:
Trong Python, bạn có thể làm:
test = float("inf")
Trong Python 3.5, bạn có thể làm:
import math
test = math.inf
Và sau đó:
test > 1
test > 10000
test > x
Sẽ luôn luôn đúng. Tất nhiên, trừ khi, như đã chỉ ra, x cũng là vô cùng hoặc "nan" ("không phải là số").
Ngoài ra (CHỈ Python 2.x), so với Ellipsis
, float(inf)
là ít hơn, ví dụ:
float('inf') < Ellipsis
sẽ trở lại đúng sự thật
Ellipsis
, so sánh lớn hơn mọi thứ, kể cả vô cực. float("inf") < Ellipsis
trả về True
math.inf < ...
hoặc float('inf') > Ellipsis
ném a TypeError: unorderable types: float() < ellipsis()
, ít nhất là đối với tôi.
Tôi không biết chính xác những gì bạn đang làm, nhưng float("inf")
mang lại cho bạn một Infinity vô cùng, lớn hơn bất kỳ số nào khác.
Có một vô số trong thư viện NumPy : from numpy import inf
. Để có được vô cực tiêu cực người ta có thể chỉ cần viết -inf
.
Một cách khác, ít thuận tiện hơn, đó là sử dụng Decimal
lớp:
from decimal import Decimal
pos_inf = Decimal('Infinity')
neg_inf = Decimal('-Infinity')
Decimal('Infinity') == float('inf')
trả về True
, vì vậy nó khá giống nhau.
float('inf') is float('inf')
trở lạiFalse
float('inf') is float('inf')
-> False
, chỉ cho rằng họ là những đối tượng khác nhau với các trường hợp khác nhau, nhưng không phải là nội dung bên trong là khác nhau - thực sự như @nemesisdesign nhọn float('int') == float('int')
giữ để True
. Đây là vấn đề tương tự như so sánh các đối tượng có thể thay đổi như [1,2,3] là [1,2,3] và [1,2,3] == [1,2,3], theo thứ tự là Sai và Đúng .. Thông tin thêm xem: stackoverflow.com/questions/2988017/ từ
Trong python2.x có một bản hack bẩn phục vụ mục đích này (KHÔNG BAO GIỜ sử dụng nó trừ khi thực sự cần thiết):
None < any integer < any string
Do đó, kiểm tra i < ''
giữ True
cho bất kỳ số nguyên i
.
Nó đã được phản đối hợp lý trong python3. Bây giờ so sánh như vậy kết thúc với
TypeError: unorderable types: str() < int()
MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
Ngoài ra nếu bạn sử dụng SymPy, bạn có thể sử dụng sympy.oo
>>> from sympy import oo
>>> oo + 1
oo
>>> oo - oo
nan
Vân vân.
math.inf
là hữu ích như một giá trị ban đầu trong các vấn đề tối ưu hóa, bởi vì nó hoạt động chính xác với min, ví dụ.min(5, math.inf) == 5
. Ví dụ: trong các thuật toán đường dẫn ngắn nhất, bạn có thể đặt khoảng cách không xác định thànhmath.inf
mà không cần trường hợp đặc biệtNone
hoặc giả sử giới hạn trên9999999
. Tương tự, bạn có thể sử dụng-math.inf
làm giá trị khởi đầu cho các vấn đề tối đa hóa.