本篇文章為筆者的學習筆記,參考書籍為 歐萊禮/Python資料科學學習手冊/Jake VanderPlas/何敏煌(譯) https://www.books.com.tw/products/0010774364
建立陣列的各種方式
內容全為0的陣列
np.zeros(10, dtype=np.int)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
內容全為1的陣列
np.ones((3,5), dtype=np.int)
array([[1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1]])
填滿同一元素
np.full((3,5), 3.14, dtype=np.float)
array([[3.14, 3.14, 3.14, 3.14, 3.14],
       [3.14, 3.14, 3.14, 3.14, 3.14],
       [3.14, 3.14, 3.14, 3.14, 3.14]])
依序填滿的矩陣
np.arange(0, 10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
產生特定間隔數的陣列
np.linspace(0,1,5)
array([0.  , 0.25, 0.5 , 0.75, 1.  ])
隨機陣列
np.random.random((3,3))
array([[0.67008401, 0.66344056, 0.66557893],
       [0.211046  , 0.63600443, 0.51327634],
       [0.75571898, 0.94306233, 0.6197861 ]])
隨機常態分佈陣列
np.random.normal(0,1(3,3))
array([[ 1.04213031,  0.77624605, -0.42446014],
       [ 0.07087546,  0.81222484, -0.52451604],
       [ 1.98723693, -0.91196085,  0.78381324]])
隨機範圍整數矩陣
np.random.randint(0,10, 10)
array([9, 7, 5, 2, 0, 3, 9, 3, 3, 4])
單位矩陣
np.eye(5)
array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.]])
未初始化矩陣
np.empty(5)
array([1., 1., 1., 1., 1.])
陣列屬性
 x = np.random.randint(0,10,(2,3))
- 
陣列維度 : x.ndim => 2
 - 
各維度大小 : x.shape => (2, 3)
 - 
整個陣列總大小 : x.size => 6
 - 
陣列的資料型態 : x.dtype => dtype(‘int32’)
 - 
陣列元素的位元組大小 : x.itemsize => 4 (Bytes)
 - 
陣列總位元組大小 : x.nbytes => 24 (Bytes)
 
陣列操作
x2 = np.array([[12, 5, 6, 1],
              [ 7, 6, 8, 8],
              [ 1, 6, 7, 7]])
- 取得2列3欄 : 
x2[:2, :3] 
array([[12,  5,  6],
       [ 7,  6,  8]])
- 取得所有偶數欄 : 
x2[:3, ::2] 
array([[12,  6],
       [ 7,  8],
       [ 1,  7]])
- 取得陣列的第1列元素 : 
x2[:, 0] 
array([12,  7,  1])
- 取得陣列的第1欄元素 : 
x2[0, :] 
array([12,  5,  6,  1])
所有陣列操作都是藉由
參考來執行,會改變原變數的值
若不想改變原變數的值,則藉由np.array.copy()來執行
- 陣列變形
x3 = np.arange(1,10)- 將x3更改為3x3矩陣 : 
x3.reshape(3,3) - 透過x3建立列向量(reshape) : 
x3.reshap(3, 1) - 透過x3建立列向量(newaxis) : 
x3[np.newaxis, :] - 透過x3建立欄向量(reshape) : 
x3.reshap(1, 3) - 透過x3建立欄向量(newaxis) : 
x3[:, np.newaxis] 
 - 將x3更改為3x3矩陣 : 
 - 陣列的合併
np.concatenate, np.vstack(垂直堆疊), np.hstack(水平堆疊), np.dstack(3D)
x = np.array([1,2,3]) y = np.array([4,5,6]) z = np.array([[99], [99]]) grid = np.array([[1,2,3], [4,5,6]])- 
合併陣列np.concatenate([x, y])
[1,2,3,4,5,6] - 
合併陣列np.concatenate(grid, grid)
[[1,2,3], [4,5,6], [1,2,3], [4,5,6]] - 
合併陣列np.concatenate(grid, grid, axis=1)
[[1,2,3,1,2,3], [4,5,6,4,5,6]] - 
垂直堆疊合併np.vstack(x, grid)
[[1, 2, 3], [1, 2, 3], [4, 5, 6]] - 
水平堆疊合併np.hstack([z, grid])
[[99, 1, 2, 3], [99, 4, 5, 6]] 
 - 
 - 陣列的分割
np.split, np.vsplit(垂直分割), np.hsplit(水平分割)
x = [1,2,3,99,99,3,2,1] grid = [[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15]]- 
分割陣列np.split(x, [3,5])
[1,2,3], [99,99], [3,2,1] - 
垂直分割陣列np.vsplit(grid, [2])
upper, lower = np.vsplit(grid, [2]) upper = [[0, 1, 2, 3], [4, 5, 6, 7]] lower = [[ 8, 9, 10, 11], [12, 13, 14, 15]] - 
水平分割陣列np.hvsplit(grid, [2])
left, right = np.hsplit(grid, [2]) left = [[ 0 1] [ 4 5] [ 8 9] [12 13]][[0, 1, 2, 3], [4, 5, 6, 7]] right = [[ 2 3] [ 6 7] [10 11] [14 15]][[ 8, 9, 10, 11], [12, 13, 14, 15]] 
 -