专栏首页零维领域利用 Numpy 进行矩阵相关运算

利用 Numpy 进行矩阵相关运算

正文共:3266 字 31 图 预计阅读时间: 9 分钟

本文目录:

  • 1. 前言
    • 1.1 基本介绍
    • 1.2 运行环境
  • 2. 函数清单
  • 3. 案例讲解
    • 3.1 Numpy.linalg
    • 3.2 Numpy.matlib

1.前言

1.1 基本介绍

NumPy 是Python数据分析必不可少的第三方库,NumPy 的出现一定程度上解决了Python运算性能不佳的问题,同时提供了更加精确的数据类型。如今,NumPy 被Python其它科学计算包作为基础包,已成为 Python 数据分析的基础,可以说 NumPy 就是SciPy、Pandas等数据处理或科学计算库最基本的函数功能库。

数据挖掘的理论背后,几乎离不开线性代数的计算,如矩阵乘法、矩阵分解、行列式求解等。本文将介绍 NumPy(目前最新版本为 1.16) 中与线性代数相关的模块的使用方法,包括 numpy.linalg , numpy.matlib 。

Numpy : https://docs.scipy.org/doc/numpy/reference/routines.html

numpy.linalg : https://docs.scipy.org/doc/numpy/reference/routines.linalg.html

numpy.matlib : https://docs.scipy.org/doc/numpy/reference/routines.matlib.html

numpy.dual : https://docs.scipy.org/doc/numpy/reference/routines.dual.html

numpy.fft : https://docs.scipy.org/doc/numpy/reference/routines.fft.html

(numpy.dual主要是利用scipy加速运算,用法与linalg和matlib中方法类似,这里不再多做介绍,numpy.fft涉及应用层面,限于篇幅,暂时不做扩展)

1.2 运行环境

  • 操作系统: win10
  • python版本:3.7.0
  • IPython版本:6.5.0
  • numpy版本 :1.15.1

2.函数清单

国际惯例,引入 NumPy 使用别名 np ,所有函数清单,方便速查。另外在 Numpy 中一维数组表示向量,多维数组表示矩阵。

Linear algebra (numpy.linalg)

线性代数模块

Matrix and vector products

矩阵相乘

dot(a, b[, out])

向量或者矩阵乘积

linalg.multi_dot(arrays)

多个矩阵的乘积

vdot(a, b)

仅适用于向量内积

inner(a, b)

内积( 对于两个二维数组的inner,相当于按X和Y的最后顺序的轴方向上取向量 ,然后依次计算内积后组成的多维数组)

outer(a, b[, out])

向量外积

matmul(x1, x2, /[, out, casting, order, …])

矩阵乘积

linalg.matrix_power(a, n)

矩阵乘幂

Decompositions

矩阵分解

linalg.qr(a[, mode])

矩阵的QR分解

linalg.svd(a[, full_matrices, compute_uv])

SVD分解

Matrix eigenvalues

特征值和特征向量

linalg.eig(a)

特征值和特征向量(方阵)

linalg.eigvals(a)

特征值(方阵)

Norms and other numbers

范数等

linalg.norm(x[, ord, axis, keepdims])

向量或者矩阵的范数

linalg.det(a)

行列式的值

linalg.matrix_rank(M[, tol, hermitian])

使用SVD分解得到矩阵的秩

trace(a[, offset, axis1, axis2, dtype, out])

Solving equations and inverting matrices

解线性方程组和逆

linalg.solve(a, b)

解线性方程组的准确解(要求满秩)

linalg.tensorsolve(a, b[, axes])

解Ax=b

linalg.lstsq(a, b[, rcond])

最小二乘

linalg.inv(a)

矩阵的逆

linalg.pinv(a[, rcond])

伪逆

Matrix library (numpy.matlib)

矩阵模块

mat(data[, dtype])

矩阵类型

matrix(data[, dtype, copy])

矩阵类型

asmatrix(data[, dtype])

将输入转化为矩阵类型

bmat(obj[, ldict, gdict])

块矩阵构造

empty(shape[, dtype, order])

只记录形状的空矩阵

zeros(shape[, dtype, order])

全0矩阵

ones(shape[, dtype, order])

全1矩阵

matlib.eye(n[, M, k, dtype, order])

产生对角线元素为1,其余元素为0的矩阵。 n 行数 M列数 k 对角元相对主对角线的位置 (可以产生长矩阵)

identity(n[, dtype])

单位阵

matlib.repmat(a, m, n)

向量或矩阵(最高只支持到2维)列方向重复m次,行方向重复n次

matlib.rand(*args)

填充随机数的矩阵

matlib.randn(*args)

填充数符合标准正态分布的矩阵

3.案例讲解

3.1 numpy.linalg 模块

  • 模块引入以及取别名
1import numpy as np
2import numpy.linalg as linalg
  • 向量或矩阵乘积
  • 多矩阵的乘积

相对于矩阵之间两两乘积,多矩阵的时候使用 multi_dot() 更加便捷

  • 向量内积

只适用于向量,如果为矩阵则结果不为矩阵的内积

  • 内积

# 对于两个二维数组的inner,相当于按X和Y的最后顺序的轴方向上取向量

# 然后依次计算内积后组成的多维数组

  • 矩阵乘幂

这里使用第二十四讲的马尔科夫矩阵

(这里基本上已经可以确定稳态了)

  • QR分解

这里使用第十七讲习题课的矩阵,可以发现和我们之前计算的 QR 结果是一致的,只不过有符号的差别。

  • SVD分解

这里使用第三十讲奇异值分解习题课的例子

  • 方阵的特征值和特征向量

这里使用第二十一讲习题课的例子

(可以发现结果都对特征向量进行了标准化)

  • 特征值

该方法只返回特征值

  • 范数

默认是二阶范数

  • 行列式的值

可以单独求解单个矩阵的行列式的值,也可以多个矩阵同时求解行列式的值

  • 矩阵的秩

同样支持多个矩阵同时求解矩阵的秩

  • 矩阵的迹
  • 解线性方程组

使用第二讲矩阵消元习题的例子,该方法要求满秩,即系数矩阵为方阵且各列线性无关。

  • 矩阵形式求解线性方程组 (Ax=b)

使用第二讲矩阵消元习题的例子,该方法同样要求满秩,即系数矩阵为方阵且各列线性无关。

  • 最小二乘

使用第十六讲习题课的例子,返回值中含有多个值,系数矩阵在返回值的第一个数组中

使用第三讲课程内容中的例子

  • 伪逆

使用第三十四讲习题课的例子,这里要求输入为方阵,因此使用该例子,我们将原矩阵补全为方阵

3.2 numpy.matlib 模块

  • 矩阵类型
  • 将其他类型转化为矩阵类型
  • 块矩阵构造
  • 空矩阵

默认会填充随机值(应该是占位用的)

  • 全 0 矩阵
  • 全 1 矩阵
  • 对角线为 1 矩阵

这里可以不止是在主对角线上,可由参数k控制,该参数定义全为 1 的对角线离主对角线的相对距离,为正则往上三角移动,为负则往下三角移动。 并且可以是非方阵。三个参数分别对应行数,列数和相对位置

  • 单位阵
  • 随机数矩阵
  • 随机数符合标准正态分布的矩阵

本文分享自微信公众号 - 零维领域(lingweilingyu)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 利用 Numpy 进行矩阵相关运算

    NumPy 是Python数据分析必不可少的第三方库,NumPy 的出现一定程度上解决了Python运算性能不佳的问题,同时提供了更加精确的数据类型。如今,N...

    fireWang
  • 线性代数--MIT18.06(三)

    ,我们依然可以使用矩阵消元的形式来求解,只不过要比我们之前提到的矩阵消元多做一些消元而已,这就是Gauss-Jordan法。

    fireWang
  • 线性代数--MIT18.06(二十七)

    傅里叶矩阵(Fourier Matrix)是一个特殊的复矩阵,同时也是一个酉矩阵。它来源于傅里叶转换,其矩阵的特殊性质,通过矩阵分解,可以将计算量从

    fireWang
  • 利用 Numpy 进行矩阵相关运算

    NumPy 是Python数据分析必不可少的第三方库,NumPy 的出现一定程度上解决了Python运算性能不佳的问题,同时提供了更加精确的数据类型。如今,N...

    fireWang
  • 从机器学习学python(四) ——numpy矩阵广播及一些技巧

    从机器学习学python(四)——numpy矩阵广播及一些技巧 (原创内容,转载请注明来源,谢谢) 在学ng的深度学习微专业时,其中有几节课讲到numpy的一...

    用户1327360
  • Moore-Penrose伪逆

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    于小勇
  • 矩阵方程

    对于矩阵 A(n,n) 和 B(n,m) 组成的矩阵方程 [A][X] = [B] 记 X(n,m) 的第i列向量为 Xi(i = 1,2...m), 矩阵B的...

    fem178
  • Numpy中的矩阵运算

    大型矩阵运算主要用matlab或者sage等专业的数学工具,但我这里要讲讲python中numpy,用来做一些日常简单的矩阵运算!这是 numpy官方文档,英文...

    用户2398817
  • 推荐系统之矩阵分解(MF)及其python实现

            目前推荐系统中用的最多的就是矩阵分解方法,在Netflix Prize推荐系统大赛中取得突出效果。以用户-项目评分矩阵为例,矩阵分解就是预测出评...

    Flaneur
  • 矩阵乘法的Strassen算法+动态规划算法(矩阵链相乘和硬币问题)

    矩阵乘法的Strassen ---- 这个算法就是在矩阵乘法中采用分治法,能够有效的提高算法的效率。 先来看看咱们在高等代数中学的普通矩阵的乘法 ? 两个矩阵相...

    张俊怡

扫码关注云+社区

领取腾讯云代金券