2017-06-04 21 views
0

剛開始用Datacamp學習python,我遇到了一個關於Numpy的問題。在做this problem(這是一個獨立的問題,所以應該很容易理解,沒有任何上下文),我很困惑的指令:「你可以在這裏使用一個小技巧:使用np_positions =='GK'作爲np_heights的索引」。關於數據表中的Numpy練習的查詢

沒有在代碼中將np_heights和np_positions鏈接在一起,該索引如何工作?起初我以爲我不得不將它們垂直連接起來,但事實證明這不是必需的。

是不是因爲只有兩個Numpy數組,它碰巧發生了相同數量的元素,Python決定自動將它們配對?如果我有多個具有相同數量元素的Numpy數組,並且使用該索引,會是一個問題嗎?

回答

1

他們唯一的共同點就是它們的長度。除此之外,他們沒有聯繫在一起。當您使用boolean indexing時,長度會起作用。

考慮以下的數組:

arr = np.array([1, 2, 3]) 

布爾值,我們可以索引到該陣列:

arr[[True, False, True]] 
Out: array([1, 3]) 

這在位置0和2(其中,它們具有True值)返回的值。

這個布爾數組可能來自任何地方。它可能來自相同的數組,或者來自相同長度的不同數組。

arr1 = np.array(['a', 'b', 'a', 'c']) 

如果我這樣做arr1 == 'a'它會做逐元素的比較,並返回

arr1 == 'a' 
Out: array([ True, False, True, False], dtype=bool) 

我可以在同一陣列中使用:

arr1[arr1=='a'] 
Out: 
array(['a', 'a'], 
     dtype='<U1') 

或在不同的陣列:

arr2 = np.array([2, 5, 1, 7]) 

arr2[arr1=='a'] 
Out: array([2, 1]) 

備註這與arr2[[True, False, True, False]]沒有什麼不同。所以我們實際上並沒有在這裏使用arr1。在你的例子中,np_positions == 'GK'也會返回一個布爾數組。由於它的大小與np_height數組的大小相同,因此只能處理布爾數組具有True值的位置。

+0

很好的解釋。在你的最後一個例子中,如果索引更改爲arr2 [[True,False,False]],會發生什麼?那麼arr2 [[True,False,False,True,True,False]]呢?布爾索引上的鏈接似乎只談論尺寸不匹配。 – lumberjack23

+0

如果長度不匹配,則會引發警告:__main __:1:VisibleDeprecationWarning:布爾值索引與維度0上的索引數組不匹配;維度爲3,但對應的布爾維度爲2',如果布爾數組較小,則假定其餘條目爲假;否則,它只是忽略布爾數組的其餘部分。它可能會在未來引發一個錯誤。 – ayhan

+0

明白了。謝謝! – lumberjack23