Bạn thường nhận được thông báo lỗi này khi cố gắng sử dụng Python các toán tử logic (not
, and
, or
) trên biểu thức so sánh liên quan đến mảng NumPy, ví dụ
>>> x = np.arange(-5, 5)
>>> (x > -2) and (x < 2)
Traceback (most recent call last):
File "<ipython-input-6-475a0a26e11c>", line 1, in <module>
(x > -2) and (x < 2)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Đó là bởi vì so sánh như vậy, như trái ngược với sự so sánh khác bằng Python, tạo mảng các phép toán luận chứ không phải là phép toán đơn (nhưng có lẽ bạn đã biết rằng):
>>> x > -2
array([False, False, False, False, True, True, True, True, True, True], dtype=bool)
>>> x < 2
array([ True, True, True, True, True, True, True, False, False, False], dtype=bool)
Một phần của giải pháp cho bạn vấn đề có thể thay thế and
bởi np.logical_and
, phát sóng hoạt động AND qua hai mảng np.bool
.
>>> np.logical_and(x > -2, x < 2)
array([False, False, False, False, True, True, True, False, False, False], dtype=bool)
>>> x[np.logical_and(x > -2, x < 2)]
array([-1, 0, 1])
Tuy nhiên, mảng như các phép toán luận không thể được sử dụng để chỉ mục vào danh sách Python bình thường, vì vậy bạn cần phải chuyển đổi đó để một mảng:
rbs = np.array([ish[4] for ish in realbooks])
Dòng nào gây ra lỗi? Ngoài ra, vui lòng định dạng mã của bạn để mã thực sự chạy. –
Nó sẽ giúp nếu bạn in ra giá trị của var. Tại một đoán, vấn đề là trong chuỗi/float/văn bản thay thế biến bạn đang giảm dần ... Dữ liệu gốc trông như thế nào sẽ yêu cầu hàng loạt các hoạt động? – abought