iT邦幫忙

0

Python ndarray迴圈呼叫問題

  • 分享至 

  • xImage

想請問在以下的範例中,為什麼for i in jobs_to_schedule[0]:必須加上[0]才能夠有run出正確的output(1 & 3),若是沒有[0]則會出現error。
據我所想像的jobs_to_schedule[0]應該是指array中的第一個值,也就是1

https://ithelp.ithome.com.tw/upload/images/20230830/20157683CVThn2tVxJ.png

嗨!弱弱的我其實是 python 小白,分享一下 C 語言的觀念。陣列名稱是一個固定位址,若要循址求值須用到指標;陣列 [0] 是一個數字,可以用 index (索引) 求值 。您要獲得真正深入的 python 陣列和物件的觀念還是得等待其他大神們的回應,我是小咖!
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
小哈片刻
iT邦研究生 5 級 ‧ 2023-08-31 02:05:42
最佳解答

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]。

了解了!!謝謝大師詳細解說

1
woeichern
iT邦新手 2 級 ‧ 2023-08-31 00:04:45

np.where 的回應值是一個 Tuple
這個 Tuple 包含了1個元素(即第1個元素)
樓主可看一下看 print(job_to_schedule)的輸出是什麼

我懂了,注意到裡面的貓膩了!!謝謝大師

我要發表回答

立即登入回答