np.where(conditions, a, b),如果只給第一個參數,那這個函式的作用就會跟np.nonzero(conditions)一樣,會回傳conditions裏面判斷為True的索引值(index)。
又因為np.where與np.nonzero都需要支援多維陣列,所以它的回傳值需要是Tuple(也是一種陣列),每個陣列代表一個維度的索引值。
比如說
import numpy as np
ajobs = [[False, True, True, True],[False, False, True, True]]
bjobs = np.nonzero(ajobs)
print(bjobs)
# 結果如下
(array([0, 0, 0, 1, 1]), array([1, 2, 3, 2, 3]))
Tuple結果的第一個array是表示原陣列(ajobs)裏第一層的index
第二個array是表示原陣列(ajobs)裏第二層陣列的index
也就是說,在ajobs這個二維陣列裏
(0,1), (0,2), (0,3), (1,2), (1,3) 這五個位置的值是True
在你的問題中,給的雖然是一維陣列,但回傳值也同樣是Tuple
import numpy as np
ajobs = [False, True, False, True]
bjobs = np.nonzero(ajobs)
print(bjobs)
# 結果如下
(array([1, 3]),)
最後得到的結果是只有一個索引的Tuple(因為只有一個維度)。要取得這個Tuple裏唯一的結果,自然就必須用 bjobs[0]。
np.where
的回應值是一個 Tuple
這個 Tuple
包含了1個元素(即第1個元素)
樓主可看一下看 print(job_to_schedule)
的輸出是什麼