多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 一、向量、矩阵和数组 > 作者:[Chris Albon](https://chrisalbon.com/) > > 译者:[飞龙](https://github.com/wizardforcel) > > 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/) ## 转置矩阵或向量 ```py # 加载库 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]]) ''' ``` ## 选择数组中的元素 ```py # 加载库 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]) ``` ## 数组变形 ```py # 加载库 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]]) ''' ``` ## 矩阵的逆 ```py # 加载库 import numpy as np # 创建矩阵 matrix = np.array([[1, 4], [2, 5]]) # 计算矩阵的逆 np.linalg.inv(matrix) ''' array([[-1.66666667, 1.33333333], [ 0.66666667, -0.33333333]]) ''' ``` ## 获取矩阵对角线 ```py # 加载库 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 ``` ## 展开矩阵 ```py # 加载库 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]) ``` ## 寻找矩阵的秩 ```py # 加载库 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 ```py # 加载库 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]) ``` ## 描述数组 ```py # 加载库 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 ``` ## 创建向量 ```py # 加载库 import numpy as np # 创建行向量 vector_row = np.array([1, 2, 3]) # 创建列向量 vector_column = np.array([[1], [2], [3]]) ``` ## 创建稀疏矩阵 ```py # 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,但我们使用的类型应该反映我们的用例。 ## 创建矩阵 ```py # 加载库 import numpy as np # 创建矩阵 matrix = np.array([[1, 4], [2, 5]]) ``` 注意 NumPy 的`mat`数据结构对于我们的目的而言不太灵活,应该避免。 ## 将字典转换为矩阵 ```py # 加载库 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'] ``` ## 计算矩阵的迹 ```py # 加载库 import numpy as np # 创建矩阵 matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 计算矩阵的迹 matrix.diagonal().sum() # 15 ``` ## 计算矩阵的行列式 ```py # 加载库 import numpy as np # 创建矩阵 matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 返回矩阵的行列式 np.linalg.det(matrix) # -9.5161973539299405e-16 ``` ## 计算均值、方差和标准差 ```py # 加载库 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 ``` ## 计算两个向量的点积 ```py # 加载库 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 ``` ## 对元素应用操作 ```py # 加载库 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]]) ''' ``` ## 矩阵的加和减 ```py # 加载库 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]]) ''' ```