讀取陣列
在 NumPy 裡,大部分的操作都是使用 ndarray 來完成,ndarray 是一個快速的且可以節省空間的多維度陣列物件,這篇教學會介紹使用 NumPy 快速建立多維陣列 ndarray。
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
讀取陣列的方法
NumPy 有下列幾種讀取陣列的方法:
方法 | 說明 |
---|---|
索引值讀取 | 根據資料在陣列中的「索引值」讀取該項目內容。 |
切片讀取 | 使用類似串列切片 slice 的方式,取出某一個範圍的項目。 |
布林值讀取 | 使用布林值篩選出結果為 True 的項目。 |
索引值讀取
對於一維的 ndarray 陣列,只要指定資料項目在陣列中的「索引值」,就能讀取該項目內容,下方的例子會取出陣列的第一個項目和第二個項目 ( 第一個項目的索引值為 0 )。
import numpy as np
a = np.array([1,2,3,4,5])
print(a[0]) # 1
print(a[1]) # 2
對於多維的 ndarray 陣列,可以使用「索引值串列」的方式,讀取指定的項目內容,下方的例子會讀取二維陣列中的兩個項目 ( 可參考圖片中顯示的項目位置 )。
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print(a[0,0]) # 1
print(a[1,1]) # 5
下方的例子會讀取三維陣列中的四個項目 ( 可參考圖片中顯示的項目位置 )。
import numpy as np
a = np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
print(a[0,0,0]) # 1
print(a[0,1,0]) # 3
print(a[1,0,1]) # 6
print(a[1,1,1]) # 8
如果索引值設定為「負值」,表示從右側開始取值,下方的例子如果設定 -1,就會取得最後一個項目的內容。
import numpy as np
a = np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
print(a[0,0,-1]) # 2
print(a[0,1,-1]) # 4
print(a[1,-1,1]) # 8
print(a[1,1,1]) # 8
切片讀取
對於一維的 ndarray 陣列,可以使用類似串列切片 slice 的方式,取出某一個範圍的項目,變成新的陣列 ( 注意第一項的索引值為 0,如果設定 -1 則是取出「倒數第二項」 )。
import numpy as np
a = np.array([1,2,3,4,5,6,7,8,9])
print(a[2:5]) # [3 4 5] 從第三項取值到第五項 ( 不包含第六項 )
print(a[:5]) # [1 2 3 4 5] 從第一項取值到第五項 ( 不包含第六項 )
print(a[2:]) # [3 4 5 6 7 8 9] 從第三項開始取值
print(a[2:-1]) # [3 4 5 6 7 8] 從第三項取值到倒數第二項
print(a[::2]) # [1 3 5 7 9] 間隔 2 取值
print(a[2:8:2]) # [3 5 7] 第三項到第七項,間隔 2 取值
print(a[::-1]) # [9 8 7 6 5 4 3 2 1] 反轉
print(a[[1,3,5,7]]) # [2 4 6 8] 取出第二、第四、第六和第八項
對於多維的 ndarray 陣列,會根據切片的設定,產生新的多維陣列。
import numpy as np
a = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]])
print(a[0, 2:4]) # [3 4]
print(a[1:, 2:4])
'''
[[ 8 9]
[13 14]]
'''
print(a[:, 2:4])
'''
[[ 3 4]
[ 8 9]
[13 14]]
'''
布林值讀取
讀取 ndarray 陣列時,可以搭配「布林值」進行篩選,篩選後會將結果為 True 的項目留下,成為一個新的陣列,下方的例子會篩選出陣列中數值大於 5 的項目、偶數以及數值介於 5~12 間的項目。
import numpy as np
a = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])
print(a[a>5]) # [ 6 7 8 9 10 11 12 13 14 15] 篩選數值大於 5 的項目
print(a[a%2==0]) # [ 2 4 6 8 10 12 14] 篩選出數值為偶數的項目
print(a[(a>5) & (a<12)]) # [ 6 7 8 9 10 11] 篩選出數值為 5~12 之間的項目 ( 注意括號 )
如果是多維陣列,篩選後會變成一個新的一維陣列,下方的例子會取出 b 陣列中數值介在 3 與 13 之間的項目。
import numpy as np
b = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]])
print(b[(b[:]>3) & (b[:]<13)]) # [ 4 5 6 7 8 9 10 11 12]
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~