Dưới đây là một ví dụ mà vấn đề cảnh báo tương tự:
import numpy as np
np.seterr(all='warn')
A = np.array([10])
a=A[-1]
a**a
sản lượng
RuntimeWarning: overflow encountered in long_scalars
Trong ví dụ trên nó xảy ra vì a
là của dtype int32
và v maximim alue storable in an int32
là 2 ** 31-1. Kể từ 10**10 > 2**32-1
, kết quả lũy thừa trong một số lớn hơn số có thể được lưu trữ trong một số int32
.
Lưu ý rằng bạn không thể dựa vào np.seterr(all='warn')
để bắt tất cả các lỗi tràn lỗi bị lỗi. Ví dụ, trên 32-bit NumPy
>>> np.multiply.reduce(np.arange(21)+1)
-1195114496
trong khi trên 64-bit NumPy:
>>> np.multiply.reduce(np.arange(21)+1)
-4249290049419214848
Cả hai thất bại mà không cần bất kỳ cảnh báo, mặc dù nó cũng là do một lỗi tràn bộ nhớ. Câu trả lời đúng là 21! bằng
In [47]: import math
In [48]: math.factorial(21)
Out[50]: 51090942171709440000L
According to numpy developer, Robert Kern,
Không giống như lỗi dấu chấm động đúng (nơi FPU phần cứng đặt một lá cờ bất cứ khi nào nó một hoạt động nguyên tử mà tràn), chúng ta cần phải thực hiện việc phát hiện tràn số nguyên chính chúng ta. Chúng tôi làm điều đó trên các số vô hướng , nhưng không phải mảng vì sẽ quá chậm để triển khai cho mọi hoạt động nguyên tử trên mảng.
Vì vậy, gánh nặng là bạn chọn thích hợp dtypes
sao cho không có hoạt động tràn.
Bạn có vui lòng cho một [ngắn, ví dụ hoàn chỉnh] (http://sscce.org/) đó chứng tỏ vấn đề này ? –
Bạn đã bao gồm thẻ numpy. Không có gì trong câu hỏi của bạn cho thấy gumpy. Bạn chưa bao gồm mã cho phép chúng tôi tạo lại lỗi. Xin hãy làm như vậy. –
có thể trùng lặp của http://stackoverflow.com/questions/3767409/python-warning-possibly-numpy – rocksportrocker