Last Updated on 2021-10-30 by Clay
在使用 Numpy 格式的資料進行條件判斷時,有時我們會接收到以下報錯訊息:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
這是因為如果我們要判斷 Numpy 格式的資料是否全等時的方法不符合 Numpy 設計時的預期。
還原錯誤
這個錯誤訊息的可能發生原因,大部分來自於使用了類似下方的程式碼:
import numpy as np
arr = np.array([1, 2, 3])
if (arr == [1, 2, 3]):
print("ok")
Output:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
就會產生這樣的報錯。
實際上,如果你將判斷式的內容印出,實際上 Numpy 格式的資料是進行每個元素的判斷的。
import numpy as np
arr = np.array([1, 2, 3])
print(arr == [1, 2, 3])
Output:
[ True True True]
所以,根本不構成放入 If
判斷式中的條件。
解決方法
所以,我們需要透過 Numpy 的 any()
和 all()
來進行判斷。
any()
: 判斷式中有元素為 True 則返回 True;反之則返回 Falseall()
: 判斷式中全部元素為 True 則返回 True;反之則返回 False
import numpy as np
print((np.array([1, 2, 3]) == [1, 2, 4]).all())
print((np.array([1, 2, 3]) == [1, 2, 4]).any())
Output:
False
True
References
- https://stackoverflow.com/questions/10062954/valueerror-the-truth-value-of-an-array-with-more-than-one-element-is-ambiguous
- https://blog.finxter.com/how-to-fix-valueerror-the-truth-value-of-an-array-with-more-than-one-element-is-ambiguous-use-a-any-or-a-all/