NumPy 1.14 教學 – #07 用陣列當索引取值(Indexing with array of indices)

開始學NumPy之前至少先熟悉Python基礎使用方法,這樣再來看NumPy才不會那麼吃力!
Python3 教學、筆記

本文將介紹NumPy的矩陣/陣列的進階索引(argmax)方法,算是蠻特別的,目前我也還不清楚這個功能要用在哪裡?因為平常我們也會經常閱讀別人的程式,所以瞭解這些技巧也是必備技能之一!就當自我訓練吧~

練習範例同步放置於GitHub:Learn NumPy – GitHub

using 1-D Array

用一維陣列當索引

這個應該蠻好理解的,直接用一維陣列i值當作陣列a的索引值。
NumPy會直接回傳陣列i內每一個元素值對應到陣列a內索引位置的數值。

Output

 

using 2-D Array

用二維陣列當索引

如果將上述用來做索引的陣列維度從一維改成二維會有怎樣的效果?
陣列j是二維陣列,用來對陣列a取值。

Output

 

using two 2-D Arraies

使用2個二維陣列當索引

贊助廣告

這個用法也蠻神奇的,各位可以看看。
下列範例程式會用到3個陣列,其中a, b兩個陣列會分別用來作為矩陣x的第一維度和第二維度的索引值!
不過NumPy回傳的矩陣形狀也會跟a, b一樣,也就是說a和b的形狀必須一樣!
邏輯如下:

 

陣列x:
$0, 1, \cdots, 27$的數值,形狀為$4\times7$的矩陣

陣列a:
$a=
\begin{bmatrix}
0 & 1 \\
2& 3
\end{bmatrix}$

陣列b:
$b=
\begin{bmatrix}
5 & 5 \\
6 & 6
\end{bmatrix}$

 

使用陣列a, b對陣列x取值:x[a, b]

    • 陣列a:x第一維度的索引值
    • 陣列b:x第二維度的索引值

$\begin{bmatrix}
x[0, 5] & x[1, 5]\\
x[2, 6] & x[3, 6]
\end{bmatrix}$

 

Output

 

多維度矩陣中尋找最大值、加總

argmax

ndarray.argmax(axis=<dimension number>)
np.argmax(<ndarray>, axis=<dimension number>)
argmax這個功能會尋找你所指定的維度之中,最大值所在之處的索引值。
使用方式也有兩種,一個是直接使用作為資料來源的ndarray物件的方法。
另一種則是使用numpy的argmax方法來達成。

Output

 

同column位置之中最大的數值

Output

 

sum

ndarray.sum(axis=<dimension number>)
np.sum(<ndarray>, axis=<dimension number>)
同column位置之中 加總各row索引值!

Output

 

Andy Wang

站在巨人的肩膀上仍須戰戰兢兢!

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料