一、向量、矩阵和数组
作者: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 librariesimport numpy as npfrom 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]])'''
