2015-12-26 12 views
27
x = np.arange(0,2,0.5) 
valeur = 2*x 

if valeur <= 0.6: 
    print ("this works") 
else: 
    print ("valeur is too high") 

đây là lỗi tôi nhận được:Sử dụng a.any() hoặc a.all()

if valeur <= 0.6: 
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

Tôi đã đọc nhiều bài viết về a.any() hoặc a.all() nhưng vẫn không thể tìm thấy cách giải thích rõ ràng cách khắc phục sự cố. Tôi thấy lý do tại sao Python không thích những gì tôi đã viết nhưng tôi không chắc chắn làm thế nào để sửa chữa nó.

+4

'valeur' là một vectơ có một số phần tử nhỏ hơn 0,6 và một số lớn hơn. Ý bạn là gì với 'valeur <= 0.6'? – Daniel

+0

valeur là một vectơ bằng [0. 1. 2. 3.] Tôi quan tâm đến từng thuật ngữ. Đối với phần dưới 0,6, sau đó trả lại "công trình này". Đối với phần trên 0,6, trả về "valeur quá cao", đây là phiên bản câm xuống, thay vì Print this hoặc Print dựa trên điều kiện, tôi cho mỗi phần tử của Valeur vào phương trình 1 hoặc phương trình 2 tùy theo điều kiện –

+2

so sánh một giá trị duy nhất với vectơ giống như so sánh cam và táo, 'any()' và 'all()' là các hàm xác minh xem điều kiện đó có được thỏa mãn bởi bất kỳ phần tử nào trong vectơ hay không, hoặc tất cả các phần tử thỏa mãn điều kiện – saljuama

Trả lời

41

Nếu bạn có một cái nhìn vào kết quả của valeur <= 0.6, bạn có thể xem những gì đang gây ra sự nhập nhằng này:

>>> valeur <= 0.6 
array([ True, False, False, False], dtype=bool) 

Vì vậy, kết quả là một mảng có trong trường hợp này 4 giá trị boolean. Bây giờ kết quả sẽ là gì? Nếu điều kiện là đúng khi một giá trị là đúng? Nếu điều kiện này chỉ đúng khi tất cả các giá trị là đúng?

Đó chính xác là những gì numpy.anynumpy.all làm. Các cựu đòi hỏi ít nhất một giá trị thực sự, sau này yêu cầu tất cả các giá trị là đúng:

>>> np.any(valeur <= 0.6) 
True 
>>> np.all(valeur <= 0.6) 
False 
1

Bạn bình luận:

valeur là một vector bằng [0. 1. 2. 3.] Tôi quan tâm đến từng thuật ngữ. Đối với phần dưới 0,6, sau đó trả lại "công trình này" ....

Nếu bạn quan tâm đến từng thuật ngữ, hãy viết mã để giải quyết. Ví dụ.

for b in valeur<=0.6: 
    if b: 
     print ("this works") 
    else: 
     print ("valeur is too high") 

Điều này sẽ viết 2 dòng.

Lỗi được tạo bởi mã numpy khi bạn cố gắng sử dụng nó một ngữ cảnh dự kiến ​​một giá trị, vô hướng, giá trị. if b:... chỉ có thể làm một việc. Nó không, tự nó, lặp đi lặp lại thông qua các yếu tố của b làm một điều khác nhau cho mỗi.

Bạn cũng có thể truyền lặp lại đó dưới dạng hiểu danh sách, ví dụ:

['yes' if b else 'no' for b in np.array([True, False, True])] 
Các vấn đề liên quan