建立陣列
在 NumPy 裡,大部分的操作都是使用 ndarray 來完成,ndarray 是一個快速的且可以節省空間的多維度陣列物件,這篇教學會介紹使用 NumPy 快速建立多維陣列 ndarray。
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
建立陣列的方法
NumPy 有下列幾種建立陣列 ndarray 的方法:
方法 | 適用維度 | 說明 |
---|---|---|
numpy.array() | 多維 | 根據現有的串列資料建立陣列。 |
numpy.empty() | 多維 | 建立指定大小的空陣列。 |
numpy.zeros() | 多維 | 建立每個項目數值為 0 的陣列。 |
numpy.ones() | 多維 | 建立每個項目數值為 1 的陣列。 |
numpy.eye() | 多維 | 建立對角線項目為 1,其他項目為 0 的陣列。 |
numpy.tile() | 多維 | 複製現有的陣列的內容,依據新的維度建立新陣列。 |
numpy.arange() | 一維 | 建立兩個數值間,指定「間距」的「等差」連續資料的陣列。 |
numpy.linspace() | 一維 | 建立兩個數值間,指定「數量」的「等差」連續資料陣列。 |
numpy.logspace() | 一維 | 建立兩個數值間,指定「數量」的「log 對數」連續資料陣列。 |
numpy.array()
numpy.array() 可以根據現有的串列資料建立陣列,下方的例子會建立一維、二維與三維陣列。
import numpy as np
a = np.array([1,2,3,4]) # 建立一維陣列
b = np.array([[1,2],[3,4]]) # 建立二維陣列
c = np.array([[[1,2],[3,4]],[[5,6],[7,8]]]) # 建立三維陣列
print(a)
print(b)
print(c)
建立陣列時,設定 ndmin 的數值,可以指定最小維度,下方的例子原本是一維的串列資料,加上 ndmin 的參數後,就會被轉換成三維陣列。
import numpy as np
a = np.array([1,2,3,4], ndmin=3)
print(a) # [[[1 2 3 4]]] 注意有三層括號,是三維陣列
建立陣列時,設定 dtype 的型態,可以將原本串列的資料轉換成指定的型態,下方的例子會將原本數字的串列,轉換成文字內容的陣列。
import numpy as np
a = np.array([1,2,3,4], dtype='U') # 轉換成 unicode 字串的格式
b = np.array([1,2,3,4], dtype='S') # 轉換成二進位字串
print(a) # ['1' '2' '3' '4']
print(b) # [b'1' b'2' b'3' b'4']
numpy.empty()
numpy.empty() 可以建立指定大小的空陣列,空陣列的意思並非內容全空,而是會以隨機數的方式放置項目 ( 操作時再將其置換 )。
import numpy as np
a = np.empty(2) # 建立一維空陣列
b = np.empty([2,2]) # 建立二維空陣列
c = np.empty([2,2,2]) # 建立三維空陣列
print(a)
print(b)
print(c)
numpy.zeros()
numpy.zeros() 可以建立每個項目數值為 0 的陣列。
import numpy as np
a = np.zeros(2) # 建立一維 zero 陣列
b = np.zeros([2,2]) # 建立二維 zero 陣列
c = np.zeros([2,2,2]) # 建立三維 zero 陣列
print(a)
print(b)
print(c)
numpy.ones()
numpy.ones() 可以建立每個項目數值為 1 的陣列。
import numpy as np
a = np.ones(2) # 建立一維 one 陣列
b = np.ones([2,2]) # 建立二維 one 陣列
c = np.ones([2,2,2]) # 建立三維 one 陣列
print(a)
print(b)
print(c)
numpy.eye()
numpy.eye() 可以建立對角線項目為 1,其他項目為 0 的陣列。
import numpy as np
print(np.eye(3)) # 建立 3x3 陣列,對角線起始點為 0
print(np.eye(3,5)) # 建立 3x5 陣列,對角線起始點為 0
print(np.eye(3,5,2)) # 建立 3x3 陣列,對角線起始點為 2
numpy.tile()
numpy.tile() 會複製現有的陣列的內容,依據新的維度建立新陣列。
a = np.array([1,2,3])
b = np.tile(a, 5) # [1,2,3] 重複 5 次變成一維陣列
c = np.tile(a, (5, 2)) # [1,2,3] 重複放入 5x2 的陣列中
print(b)
print(c)
numpy.arange()
numpy.arange() 可以建立兩個數值間,指定「間距」的「等差」連續資料的陣列,支援小數點的間隔 ( 設定 dtype 可指定資料型態 )。
import numpy as np
a = np.arange(10) # 建立 1~10,間隔為 1 的陣列
b = np.arange(5,10) # 建立 5~10,間隔為 1 的陣列
c = np.arange(5,10,0.1) # 建立 5~10,間隔為 0.1 的陣列
d = np.arange(5,10,dtype='float') # 建立 5~10,間隔為 1 的浮點數陣列
print(a)
print(b)
print(c)
print(d)
numpy.linspace()
numpy.linspace() 可以建立兩個數值間,指定「數量」的「等差」連續資料陣列,( 額外設定 endpoint False 表示不包含最後一個數字、設定 dtype 可指定資料型態 )。
import numpy as np
a = np.linspace(5, 10, 10) # 建立 5~10,內容有 10 個項目的陣列
b = np.linspace(5, 10, 10, endpoint=False) # 建立 5~9,內容有 10 個項目的陣列
c = np.linspace(5, 10, 10, dtype='int') # 建立 5~10,內容有 10 個「整數」項目的陣列
print(a)
print(b)
print(c)
numpy.logspace()
numpy.logspace() 可以建立兩個數值間,指定「數量」的「log 對數」連續資料陣列,( 額外設定 endpoint False 表示不包含最後一個數字、設定 dtype 可指定資料型態 )。
import numpy as np
a = np.logspace(0, 1, 10)
b = np.logspace(0, 1, 10, False)
print(a)
print(b)
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~