一、向量、矩阵和数组

作者:Chris Albon

译者:飞龙

协议:CC BY-NC-SA 4.0

转置矩阵或向量

  1. # 加载库
  2. import numpy as np
  3. # 创建向量
  4. vector = np.array([1, 2, 3, 4, 5, 6])
  5. # 创建矩阵
  6. matrix = np.array([[1, 2, 3],
  7. [4, 5, 6],
  8. [7, 8, 9]])
  9. # 转置向量
  10. vector.T
  11. # array([1, 2, 3, 4, 5, 6])
  12. # 转置矩阵
  13. matrix.T
  14. '''
  15. array([[1, 4, 7],
  16. [2, 5, 8],
  17. [3, 6, 9]])
  18. '''

选择数组中的元素

  1. # 加载库
  2. import numpy as np
  3. # 创建行向量
  4. vector = np.array([1, 2, 3, 4, 5, 6])
  5. # 选择第二个元素
  6. vector[1]
  7. # 2
  8. # 创建矩阵
  9. matrix = np.array([[1, 2, 3],
  10. [4, 5, 6],
  11. [7, 8, 9]])
  12. # 选择第二行第二列
  13. matrix[1,1]
  14. # 5
  15. # 创建矩阵
  16. tensor = np.array([
  17. [[[1, 1], [1, 1]], [[2, 2], [2, 2]]],
  18. [[[3, 3], [3, 3]], [[4, 4], [4, 4]]]
  19. ])
  20. # 选择三个维度的每个的第二个元素
  21. tensor[1,1,1]
  22. # array([4, 4])

数组变形

  1. # 加载库
  2. import numpy as np
  3. # 创建 4x3 矩阵
  4. matrix = np.array([[1, 2, 3],
  5. [4, 5, 6],
  6. [7, 8, 9],
  7. [10, 11, 12]])
  8. # 将矩阵变形为 2x6 矩阵
  9. matrix.reshape(2, 6)
  10. '''
  11. array([[ 1, 2, 3, 4, 5, 6],
  12. [ 7, 8, 9, 10, 11, 12]])
  13. '''

矩阵的逆

  1. # 加载库
  2. import numpy as np
  3. # 创建矩阵
  4. matrix = np.array([[1, 4],
  5. [2, 5]])
  6. # 计算矩阵的逆
  7. np.linalg.inv(matrix)
  8. '''
  9. array([[-1.66666667, 1.33333333],
  10. [ 0.66666667, -0.33333333]])
  11. '''

获取矩阵对角线

  1. # 加载库
  2. import numpy as np
  3. # 创建矩阵
  4. matrix = np.array([[1, 2, 3],
  5. [4, 5, 6],
  6. [7, 8, 9]])
  7. # 返回对角线元素
  8. matrix.diagonal()
  9. # array([1, 5, 9])
  10. # 创建矩阵的迹
  11. matrix.diagonal().sum()
  12. # 15

展开矩阵

  1. # 加载库
  2. import numpy as np
  3. # 创建矩阵
  4. matrix = np.array([[1, 2, 3],
  5. [4, 5, 6],
  6. [7, 8, 9]])
  7. # 展开矩阵
  8. matrix.flatten()
  9. # array([1, 2, 3, 4, 5, 6, 7, 8, 9])

寻找矩阵的秩

  1. # 加载库
  2. import numpy as np
  3. # 创建矩阵
  4. matrix = np.array([[1, 2, 3],
  5. [4, 5, 6],
  6. [7, 8, 9]])
  7. # 返回矩阵的秩
  8. np.linalg.matrix_rank(matrix)
  9. # 2

Find The Maximum And Minimum

  1. # 加载库
  2. import numpy as np
  3. # 创建矩阵
  4. matrix = np.array([[1, 2, 3],
  5. [4, 5, 6],
  6. [7, 8, 9]])
  7. # 返回最大元素
  8. np.max(matrix)
  9. # 9
  10. # 返回最小元素
  11. np.min(matrix)
  12. # 1
  13. # 寻找每列的最大元素
  14. np.max(matrix, axis=0)
  15. # array([7, 8, 9])
  16. # 寻找每行的最大元素
  17. np.max(matrix, axis=1)
  18. # array([3, 6, 9])

描述数组

  1. # 加载库
  2. import numpy as np
  3. # 创建矩阵
  4. matrix = np.array([[1, 2, 3, 4],
  5. [5, 6, 7, 8],
  6. [9, 10, 11, 12]])
  7. # 查看行和列数
  8. matrix.shape
  9. # (3, 4)
  10. # 查看元素数(行乘列)
  11. matrix.size
  12. # 12
  13. # 查看维数
  14. matrix.ndim
  15. # 2

创建向量

  1. # 加载库
  2. import numpy as np
  3. # 创建行向量
  4. vector_row = np.array([1, 2, 3])
  5. # 创建列向量
  6. vector_column = np.array([[1],
  7. [2],
  8. [3]])

创建稀疏矩阵

  1. # Load libraries
  2. import numpy as np
  3. from scipy import sparse
  4. # 创建矩阵
  5. matrix = np.array([[0, 0],
  6. [0, 1],
  7. [3, 0]])
  8. # 创建压缩稀疏行(CSR)矩阵
  9. matrix_sparse = sparse.csr_matrix(matrix)

注意:有许多类型的稀疏矩阵。 在上面的示例中,我们使用 CSR,但我们使用的类型应该反映我们的用例。

创建矩阵

  1. # 加载库
  2. import numpy as np
  3. # 创建矩阵
  4. matrix = np.array([[1, 4],
  5. [2, 5]])

注意 NumPy 的mat数据结构对于我们的目的而言不太灵活,应该避免。

将字典转换为矩阵

  1. # 加载库
  2. from sklearn.feature_extraction import DictVectorizer
  3. # 我们的数据字典
  4. data_dict = [{'Red': 2, 'Blue': 4},
  5. {'Red': 4, 'Blue': 3},
  6. {'Red': 1, 'Yellow': 2},
  7. {'Red': 2, 'Yellow': 2}]
  8. # 创建 DictVectorizer 对象
  9. dictvectorizer = DictVectorizer(sparse=False)
  10. # 将字典转换为特征矩阵
  11. features = dictvectorizer.fit_transform(data_dict)
  12. # 查看特征矩阵
  13. features
  14. '''
  15. array([[ 4., 2., 0.],
  16. [ 3., 4., 0.],
  17. [ 0., 1., 2.],
  18. [ 0., 2., 2.]])
  19. '''
  20. # 查看特征矩阵的列名
  21. dictvectorizer.get_feature_names()
  22. # ['Blue', 'Red', 'Yellow']

计算矩阵的迹

  1. # 加载库
  2. import numpy as np
  3. # 创建矩阵
  4. matrix = np.array([[1, 2, 3],
  5. [4, 5, 6],
  6. [7, 8, 9]])
  7. # 计算矩阵的迹
  8. matrix.diagonal().sum()
  9. # 15

计算矩阵的行列式

  1. # 加载库
  2. import numpy as np
  3. # 创建矩阵
  4. matrix = np.array([[1, 2, 3],
  5. [4, 5, 6],
  6. [7, 8, 9]])
  7. # 返回矩阵的行列式
  8. np.linalg.det(matrix)
  9. # -9.5161973539299405e-16

计算均值、方差和标准差

  1. # 加载库
  2. import numpy as np
  3. # 创建矩阵
  4. matrix = np.array([[1, 2, 3],
  5. [4, 5, 6],
  6. [7, 8, 9]])
  7. # 返回均值
  8. np.mean(matrix)
  9. # 5.0
  10. # 返回方差
  11. np.var(matrix)
  12. # 6.666666666666667
  13. # 返回标准差
  14. np.std(matrix)
  15. # 2.5819888974716112

计算两个向量的点积

  1. # 加载库
  2. import numpy as np
  3. # 创建两个向量
  4. vector_a = np.array([1,2,3])
  5. vector_b = np.array([4,5,6])
  6. # 计算点积
  7. np.dot(vector_a, vector_b)
  8. # 32
  9. # 计算点积
  10. vector_a @ vector_b
  11. # 32

对元素应用操作

  1. # 加载库
  2. import numpy as np
  3. # 创建矩阵
  4. matrix = np.array([[1, 2, 3],
  5. [4, 5, 6],
  6. [7, 8, 9]])
  7. # 创建加上 100 的函数
  8. add_100 = lambda i: i + 100
  9. # 创建向量化函数
  10. vectorized_add_100 = np.vectorize(add_100)
  11. # 对矩阵的所有元素应用函数
  12. vectorized_add_100(matrix)
  13. '''
  14. array([[101, 102, 103],
  15. [104, 105, 106],
  16. [107, 108, 109]])
  17. '''

矩阵的加和减

  1. # 加载库
  2. import numpy as np
  3. # 创建矩阵
  4. matrix_a = np.array([[1, 1, 1],
  5. [1, 1, 1],
  6. [1, 1, 2]])
  7. # 创建矩阵
  8. matrix_b = np.array([[1, 3, 1],
  9. [1, 3, 1],
  10. [1, 3, 8]])
  11. # 将两个矩阵相加
  12. np.add(matrix_a, matrix_b)
  13. '''
  14. array([[ 2, 4, 2],
  15. [ 2, 4, 2],
  16. [ 2, 4, 10]])
  17. '''
  18. # 将两个矩阵相减
  19. np.subtract(matrix_a, matrix_b)
  20. '''
  21. array([[ 0, -2, 0],
  22. [ 0, -2, 0],
  23. [ 0, -2, -6]])
  24. '''