Skip to content

[已解決][Python] 使用 Numpy 判斷時報錯:ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

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;反之則返回 False
  • all(): 判斷式中全部元素為 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


Read More

Tags:

Leave a Reply