資料科學和人工智慧技術筆記 一、向量、矩陣和陣列
一、向量、矩陣和陣列
作者:ofollow,noindex">Chris Albon
譯者:飛龍
轉置矩陣或向量
# 載入庫 import numpy as np # 建立向量 vector = np.array([1, 2, 3, 4, 5, 6]) # 建立矩陣 matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 轉置向量 vector.T # array([1, 2, 3, 4, 5, 6]) # 轉置矩陣 matrix.T ''' array([[1, 4, 7], [2, 5, 8], [3, 6, 9]]) '''
選擇陣列中的元素
# 載入庫 import numpy as np # 建立行向量 vector = np.array([1, 2, 3, 4, 5, 6]) # 選擇第二個元素 vector[1] # 2 # 建立矩陣 matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 選擇第二行第二列 matrix[1,1] # 5 # 建立矩陣 tensor = np.array([ [[[1, 1], [1, 1]], [[2, 2], [2, 2]]], [[[3, 3], [3, 3]], [[4, 4], [4, 4]]] ]) # 選擇三個維度的每個的第二個元素 tensor[1,1,1] # array([4, 4])
陣列變形
# 載入庫 import numpy as np # 建立 4x3 矩陣 matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) # 將矩陣變形為 2x6 矩陣 matrix.reshape(2, 6) ''' array([[ 1,2,3,4,5,6], [ 7,8,9, 10, 11, 12]]) '''
矩陣的逆
# 載入庫 import numpy as np # 建立矩陣 matrix = np.array([[1, 4], [2, 5]]) # 計算矩陣的逆 np.linalg.inv(matrix) ''' array([[-1.66666667,1.33333333], [ 0.66666667, -0.33333333]]) '''
獲取矩陣對角線
# 載入庫 import numpy as np # 建立矩陣 matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 返回對角線元素 matrix.diagonal() # array([1, 5, 9]) # 建立矩陣的跡 matrix.diagonal().sum() # 15
展開矩陣
# 載入庫 import numpy as np # 建立矩陣 matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 展開矩陣 matrix.flatten() # array([1, 2, 3, 4, 5, 6, 7, 8, 9])
尋找矩陣的秩
# 載入庫 import numpy as np # 建立矩陣 matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 返回矩陣的秩 np.linalg.matrix_rank(matrix) # 2
Find The Maximum And Minimum
# 載入庫 import numpy as np # 建立矩陣 matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 返回最大元素 np.max(matrix) # 9 # 返回最小元素 np.min(matrix) # 1 # 尋找每列的最大元素 np.max(matrix, axis=0) # array([7, 8, 9]) # 尋找每行的最大元素 np.max(matrix, axis=1) # array([3, 6, 9])
描述陣列
# 載入庫 import numpy as np # 建立矩陣 matrix = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) # 檢視行和列數 matrix.shape # (3, 4) # 檢視元素數(行乘列) matrix.size # 12 # 檢視維數 matrix.ndim # 2
建立向量
# 載入庫 import numpy as np # 建立行向量 vector_row = np.array([1, 2, 3]) # 建立列向量 vector_column = np.array([[1], [2], [3]])
建立稀疏矩陣
# Load libraries import numpy as np from scipy import sparse # 建立矩陣 matrix = np.array([[0, 0], [0, 1], [3, 0]]) # 建立壓縮稀疏行(CSR)矩陣 matrix_sparse = sparse.csr_matrix(matrix)
注意:有許多型別的稀疏矩陣。 在上面的示例中,我們使用 CSR,但我們使用的型別應該反映我們的用例。
建立矩陣
# 載入庫 import numpy as np # 建立矩陣 matrix = np.array([[1, 4], [2, 5]])
注意 NumPy 的mat
資料結構對於我們的目的而言不太靈活,應該避免。
將字典轉換為矩陣
# 載入庫 from sklearn.feature_extraction import DictVectorizer # 我們的資料字典 data_dict = [{'Red': 2, 'Blue': 4}, {'Red': 4, 'Blue': 3}, {'Red': 1, 'Yellow': 2}, {'Red': 2, 'Yellow': 2}] # 建立 DictVectorizer 物件 dictvectorizer = DictVectorizer(sparse=False) # 將字典轉換為特徵矩陣 features = dictvectorizer.fit_transform(data_dict) # 檢視特徵矩陣 features ''' array([[ 4.,2.,0.], [ 3.,4.,0.], [ 0.,1.,2.], [ 0.,2.,2.]]) ''' # 檢視特徵矩陣的列名 dictvectorizer.get_feature_names() # ['Blue', 'Red', 'Yellow']
計算矩陣的跡
# 載入庫 import numpy as np # 建立矩陣 matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 計算矩陣的跡 matrix.diagonal().sum() # 15
計算矩陣的行列式
# 載入庫 import numpy as np # 建立矩陣 matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 返回矩陣的行列式 np.linalg.det(matrix) # -9.5161973539299405e-16
計算均值、方差和標準差
# 載入庫 import numpy as np # 建立矩陣 matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 返回均值 np.mean(matrix) # 5.0 # 返回方差 np.var(matrix) # 6.666666666666667 # 返回標準差 np.std(matrix) # 2.5819888974716112
計算兩個向量的點積
# 載入庫 import numpy as np # 建立兩個向量 vector_a = np.array([1,2,3]) vector_b = np.array([4,5,6]) # 計算點積 np.dot(vector_a, vector_b) # 32 # 計算點積 vector_a @ vector_b # 32
對元素應用操作
# 載入庫 import numpy as np # 建立矩陣 matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 建立加上 100 的函式 add_100 = lambda i: i + 100 # 建立向量化函式 vectorized_add_100 = np.vectorize(add_100) # 對矩陣的所有元素應用函式 vectorized_add_100(matrix) ''' array([[101, 102, 103], [104, 105, 106], [107, 108, 109]]) '''
矩陣的加和減
# 載入庫 import numpy as np # 建立矩陣 matrix_a = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 2]]) # 建立矩陣 matrix_b = np.array([[1, 3, 1], [1, 3, 1], [1, 3, 8]]) # 將兩個矩陣相加 np.add(matrix_a, matrix_b) ''' array([[ 2,4,2], [ 2,4,2], [ 2,4, 10]]) ''' # 將兩個矩陣相減 np.subtract(matrix_a, matrix_b) ''' array([[ 0, -2,0], [ 0, -2,0], [ 0, -2, -6]]) '''