1. 程式人生 > 實用技巧 >01.Numpy陣列的基本應用

01.Numpy陣列的基本應用

  1. 陣列的建立

  2. 陣列的訪問

  3. 陣列的合併

  4. 陣列的分割

陣列建立

>>> import numpy as np

建立一維陣列
>>> x = np.arange(10)
>>> x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

建立二維陣列
>>> X = np.arange(10).reshape(2, 5)
>>> X
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])

檢視陣列為維度
>>> x.ndim
1 >>> X.ndim 2 檢視陣列的形狀 >>> X.shape (2, 5)

陣列訪問

>>> X
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])

>>> X[0]
array([0, 1, 2, 3, 4])

>>> X[1,1]
6

>>> X[0:4]
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])

>>> X[0:1]
array([[0, 1, 2, 3, 4]])

>>> X[0:2] array([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]) >>> X[:2, :2] array([[0, 1], [5, 6]]) >>> X[:, 1] array([1, 6]) >>> X[1, :] array([5, 6, 7, 8, 9]) 建立子陣列 >>> subX = X[:2, :2] >>> subX array([[0, 1], [5, 6]]) 子陣列修改 >>> subX[0, 0] = 100 >>> subX array([[
100, 1], [ 5, 6]]) >>> X array([[100, 1, 2, 3, 4], [ 5, 6, 7, 8, 9]]) 如何使子陣列的修改不影響原陣列 >>> subX = X[:2, :2].copy() >>> subX array([[100, 1], [ 5, 6]]) >>> subX[0, 1] = 200 >>> subX array([[100, 200], [ 5, 6]]) >>> X array([[100, 1, 2, 3, 4], [ 5, 6, 7, 8, 9]])

陣列形狀

>>> x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> x.reshape(2, 5)
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])
>>> x.reshape(5, 2)
array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7],
       [8, 9]])
>>> A = x.reshape(5, 2)
>>> A
array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7],
       [8, 9]])
>>> x.reshape(10, -1)
array([[0],
       [1],
       [2],
       [3],
       [4],
       [5],
       [6],
       [7],
       [8],
       [9]])
>>> x.reshape(-1, 10)
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

數組合並

>>> a = np.array([1,2,3])
>>> b = np.array([4,5,6])
>>> a,b
(array([1, 2, 3]), array([4, 5, 6]))

>>> np.concatenate([a,b])
array([1, 2, 3, 4, 5, 6])

>>> c = np.array([7,8,9])
>>> np.concatenate([a,b,c])
array([1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> A = np.array([[1,2,3],[4,5,6]])
>>> np.concatenate([A, A])
array([[1, 2, 3],
       [4, 5, 6],
       [1, 2, 3],
       [4, 5, 6]])
>>> np.concatenate([A, A], axis=0)
array([[1, 2, 3],
       [4, 5, 6],
       [1, 2, 3],
       [4, 5, 6]])
>>> np.concatenate([A, A], axis=1)
array([[1, 2, 3, 1, 2, 3],
       [4, 5, 6, 4, 5, 6]])

不能合併兩個維度不同的陣列
>>> np.concatenate([A, a])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<__array_function__ internals>", line 5, in concatenate
ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 2 dimension(s) and the array at index 1 has 1 dimension(s)

如何忽略維度問題
>>> np.concatenate([A, a.reshape(1, -1)])
array([[1, 2, 3],
       [4, 5, 6],
       [1, 2, 3]])
>>> A,a
(array([[1, 2, 3],
       [4, 5, 6]]), array([1, 2, 3]))
>>> A.shape, a.shape
((2, 3), (3,))
>>> np.vstack([A, a])
array([[1, 2, 3],
       [4, 5, 6],
       [1, 2, 3]])
>>> a = np.array([[6],[6]])
>>> a
array([[6],
       [6]])
>>> np.hstack([A, a])
array([[1, 2, 3, 6],
       [4, 5, 6, 6]])

陣列分割

>>> x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> x1,x2,x3 = np.split(x, [3,7])
>>> x1,x2,x3
(array([0, 1, 2]), array([3, 4, 5, 6]), array([7, 8, 9]))
>>> A = np.arange(16).reshape(4,4)
>>> A
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
>>> A1,A2 = np.split(A, [2])
>>> A1,A2
(array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]]))
>>> A1,A2 = np.split(A,[2],axis=1)
>>> A1,A2
(array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]]))
>>> A1, A2 = np.vsplit(A, [2])
>>> A1,A2
(array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]]))
>>> A1,A2 = np.hsplit(A,[2])
>>> A1,A2
(array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]]))