美文网首页arduino从零开始玩转大数据大数据
小白的机器学习实战——向量,矩阵和数组

小白的机器学习实战——向量,矩阵和数组

作者: 繁著 | 来源:发表于2017-11-28 09:37 被阅读31次

创建矩阵

import numpy as np
# 创建矩阵
matrix = np.array([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9],
                   [10, 11, 12]])

向量

# 行向量
vector_row = np.array([1, 2, 3])
# 列向量
vector_column = np.array([[1],
                          [2],
                          [3]])

计算平均值,方差和标准偏差

# 计算均值
np.mean(matrix)
>>> 6.5
# 计算方差
np.var(matrix)
>>> 11.916666666666666
# 计算标准差
np.std(matrix)
>>> 3.4520525295346629

重塑矩阵

# 第二维可以为-1让程序自己推断,如matrix.reshape(2, -1)
matrix.reshape(2, 6)
>>> array([[ 1,  2,  3,  4,  5,  6],
       [ 7,  8,  9, 10, 11, 12]])
    

矩阵加减法

# 创建矩阵a
matrix_a = np.array([[1, 1, 1],
                     [1, 1, 1],
                     [1, 1, 2]])

# 创建矩阵b
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]])

对矩阵元素进行操作

# 创建一个方法:对每个元素加10
add_100 = lambda i: i + 10

# 在对numpy的数组进行操作时,我们应该尽量避免循环操作,尽可能利用矢量化函数来避免循环。但是,直接将自定义函数应用在numpy数组之上会报错,我们需要将函数进行矢量化转换.
vectorized_add_100 = np.vectorize(add_100)

# 最后将函数应用到矩阵上
vectorized_add_100(matrix)
>>> array([[11, 12, 13],
           [14, 15, 16],
           [17, 18, 19],
           [20, 21, 22]])

创建稀疏矩阵

# 创建一个矩阵,其中零元素远远多于非零元素
matrix = np.array([[0, 0],
                   [1, 0],
                   [0, 6]])
# 由于稀疏矩阵中非零元素较少,零元素较多,因此可以采用只存储非零元素的方法来进行压缩存储。
# 另外对于很多元素为零的稀疏矩阵,仅存储非零元素可使矩阵操作效率更高,速度更快。
# python不能自动创建稀疏矩阵,所以要用scipy中特殊的命令来得到稀疏矩阵。
from scipy import sparse
matrix_sparse = sparse.csr_matrix(matrix)

描述一个矩阵

# 查看行和列
matrix.shape
>>> (4, 3)
# 查看所有元素个数(行*列)
matrix.size
>>> 12
# 查看维数
matrix.ndim
>>> 2

最大值和最小值

# 最大值
np.max(matrix)
>>> 12
# 最小值
np.min(matrix)
>>> 1
# 按列查找最大元素
np.max(matrix, axis=0)
>>> array([10, 11, 12])
# 按行查找最大元素
np.max(matrix, axis=1)
>>> array([3, 6, 9,12])

矩阵求逆

# 创建一个新矩阵
matrix_n = np.array([[1, 2],
                   [3, 4]])
# 计算逆矩阵
np.linalg.inv(matrix_n)
>>> array([[-2. ,  1. ],
       [ 1.5, -0.5]])

展平矩阵

matrix.flatten()
>>> array([1, 2, 3, 4, 5, 6, 7, 8, 9])

元素选择

# 对一个向量
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])

计算矩阵点乘(对应位置相乘之后再相加)

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

计算矩阵的行列式(The Determinant Of A Matrix)、矩阵的迹(The Trace Of A Matrix)和矩阵的秩(The Rank Of A Matrix)

matrix = np.array([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]])
# 行列式:行列式(Determinant)是数学中的一个函数,将一个 n*n的矩阵A映射到一个标量,记作det(A)或|A|
np.linalg.det(matrix)
>>> -9.5161973539299405e-16

# 迹:在线性代数中,一个n×n矩阵A的主对角线(从左上方至右下方的对角线)上各个元素的总和被称为矩阵A的迹(或迹数),一般记作tr(A)。
# 先获得矩阵的对角线
matrix.diagonal()
>>> array([1, 5, 9])
# 对角线求和就是迹
matrix.diagonal().sum()
>>> 15
# 秩:在线性代数中,一个矩阵A的列秩是A的线性独立的纵列的极大数目。
np.linalg.matrix_rank(matrix)
>>> 2

矢量或矩阵转置

# 创建一个矢量
vector = np.array([1, 2, 3, 4, 5, 6])
# 转置
vector.T
>>> array([1, 2, 3, 4, 5, 6])

# 创建一个矩阵
matrix = np.array([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]])
# 转置
matrix.T
>>> array([[1, 4, 7],
          [2, 5, 8],
          [3, 6, 9]])

参考:https://chrisalbon.com/

相关文章

  • 小白的机器学习实战——向量,矩阵和数组

    创建矩阵 向量 计算平均值,方差和标准偏差 重塑矩阵 矩阵加减法 对矩阵元素进行操作 创建稀疏矩阵 描述一个矩阵 ...

  • 第2章 矩阵

    矩阵 向量是标量的数组,矩阵是向量的数组。 n维向量 x (N*M的矩阵) = M维向量 矩阵就是映射。...

  • 译 介绍机器学习中的向量范数

    译 介绍机器学习中的向量范数 原文地址 向量范数 向量和矩阵运算中常常依赖向量的大小和长度的计算。 向量的长度称为...

  • 学习R记录 <- 基础3

    向量、矩阵、数组 向量、矩阵、数组,都是在使用R中常用到的 1.1向量 使用c函数可以拼接数值和向量 除此之外用v...

  • 支持向量机(SVM)入门理解与推导

    首先推荐:机器学习实战教程(八):支持向量机原理篇之手撕线性SVM机器学习实战教程(九):支持向量机实战篇之再撕非...

  • R语言编程艺术 第2章 向量(上)

    2.1标量、向量、数组与矩阵 向量长度:length()矩阵、数组本质上是向量。 2.2声明 变量可以直接赋值,无...

  • 视频特效学习04-OpenGL基础变化

    学习目标: 向量、矩阵和基础变化(了解) 使用矩阵/向量移动几何图形(实践) 矩阵堆栈(理解) 1. 向量与矩阵 ...

  • PCA算法及相关资料

    1.《机器学习实战》第13章2.特征向量和特征值3.PCA要对数据进行预处理的原因4.协方差与协方差矩阵

  • 第一周 - Linear Algebra Review(线性代数

    矩阵 矩阵是一个二维数组。 向量 向量是只有一列的矩阵。 矩阵的加法和减法 只有相同行列的两个矩阵才能计算加法和减...

  • 机器学习中的矩阵、向量求导

    写在前面 本文的目标读者是想快速掌握矩阵、向量求导法则的学习者,主要面向矩阵、向量求导在机器学习中的应用。因此,本...

网友评论

    本文标题:小白的机器学习实战——向量,矩阵和数组

    本文链接:https://www.haomeiwen.com/subject/axlsbxtx.html