Số cuối cùng là một (tên Python cho một số nguyên có độ chính xác tùy ý) long
, mà NumPy dường như không thể đối phó với:
>>> type(100000000000000000000)
<type 'long'>
>>> type(np.int(100000000000000000000))
<type 'long'>
>>> np.int64(100000000000000000000)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: Python int too large to convert to C long
Các AttributeError
xảy ra vì NumPy, nhìn thấy một kiểu mà nó không biết cách xử lý, mặc định gọi phương thức sqrt
trên đối tượng; nhưng điều đó không tồn tại. Vì vậy, không phải numpy.sqrt
bị thiếu, nhưng long.sqrt
.
Ngược lại, math.sqrt
biết về long
. Nếu bạn đang đi để đối phó với số lượng rất lớn trong NumPy, sử dụng phao bất cứ khi nào khả thi.
EDIT: Alright, bạn đang sử dụng Python 3. Trong khi sự phân biệt giữa int
và long
has disappeared trong phiên bản đó, NumPy vẫn còn nhạy cảm với sự khác biệt giữa một PyLongObject
có thể được chuyển đổi thành công cho một C long
sử dụng PyLong_AsLong
và cái không thể.
Nguồn
2013-03-13 16:26:11
Đã học được điều gì đó mới mẻ tại đây. Cảm ơn vì đăng! – mgilson