Numpy入门(3)—线性代数

这篇具有很好参考价值的文章主要介绍了Numpy入门(3)—线性代数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

线性代数

线性代数(如矩阵乘法、矩阵分解、行列式以及其他方阵数学等)是任何数组库的重要组成部分,NumPy中实现了线性代数中常用的各种操作,并形成了numpy.linalg线性代数相关的模块。本节主要介绍如下函数:

  • diag:以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0)。
  • dot:矩阵乘法。
  • trace:计算对角线元素的和。
  • det:计算矩阵行列式。
  • eig:计算方阵的特征值和特征向量。
  • inv:计算方阵的逆。

向量与矩阵:

矩阵:有多行多列元素组成的一个集合,一个m*n的矩阵,有m行n列个元素

向量:如果一个矩阵只有一列,那么就是一个列向量;如果只有一行,那么就是一个行向量

从某个角度来说,矩阵就是由多个向量组成的

矩阵相乘:

A矩阵:m行,x列

B矩阵:n行,y列

前提:x=n

C矩阵:AB乘积

  • 乘积C的第m行、n列 = 矩阵A的第m行的元素与矩阵B第n列元素的乘积之和
# 矩阵相乘
a = np.arange(12)
b = a.reshape([3, 4])
c = a.reshape([4, 3])
# 矩阵b的第二维大小,必须等于矩阵c的第一维大小
d = b.dot(c) # 等价于 np.dot(b, c)
print('a: \n{}'.format(a))
print('b: \n{}'.format(b))
print('c: \n{}'.format(c))
print('d: \n{}'.format(d))

a:
[ 0 1 2 3 4 5 6 7 8 9 10 11]
b:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
c:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
d:
[[ 42 48 54]
[114 136 158]
[186 224 262]]

# numpy.linalg  中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西
# np.linalg.diag 以一维数组的形式返回方阵的对角线(或非对角线)元素,
# 或将一维数组转换为方阵(非对角线元素为0)
e = np.diag(d)
f = np.diag(e)
print('d: \n{}'.format(d))
print('e: \n{}'.format(e))
print('f: \n{}'.format(f))

d:
[[ 42 48 54]
[114 136 158]
[186 224 262]]
e:
[ 42 136 262]
f:
[[ 42 0 0]
[ 0 136 0]
[ 0 0 262]]

# trace, 计算对角线元素的和
g = np.trace(d)
g

440

# det,计算行列式
h = np.linalg.det(d)
h

1.3642420526593978e-11

# eig,计算特征值和特征向量
i = np.linalg.eig(d)
i

(array([4.36702561e+02, 3.29743887e+00, 3.13152204e-14]), array([[ 0.17716392, 0.77712552, 0.40824829], [ 0.5095763 , 0.07620532, -0.81649658], [ 0.84198868, -0.62471488, 0.40824829]]))

# inv,计算方阵的逆
tmp = np.random.rand(3, 3)
j = np.linalg.inv(tmp)
j

array([[-0.59449952, 1.39735912, -0.06654123], [ 1.56034184, -0.40734618, -0.48055062], [ 0.10659811, -0.62164179, 1.30437759]])

补充:矩阵的逆

矩阵的逆是指对于一个n维的矩阵A,存在一个n维的矩阵B,使得A乘以B等于单位矩阵E,即AB=BA=E。其逆矩阵求解方法,有以下几种:

伴随矩阵法: 伴随矩阵法是求解矩阵逆的一种方法。对于一个n维矩阵A,其逆矩阵可以用下式表示:A^(-1)=1/|A| * Adj(A),其中|A|表示A的行列式,Adj(A)表示A的伴随矩阵。伴随矩阵的求法是:先求出矩阵A的代数余子式,然后将其转置得到的矩阵即为伴随矩阵。

初等变换法: 初等变换法是求解矩阵逆的另一种方法。将待求逆的矩阵A和单位矩阵E按行合并成一个矩阵[A|E],然后对其进行初等变换,直到左边的矩阵变为单位矩阵,右边的矩阵即为所求的逆矩阵。

高斯-约旦消元法: 高斯-约旦消元法也是求解矩阵逆的一种方法。将待求逆的矩阵A和单位矩阵E按列合并成一个矩阵[A|E],然后对其进行高斯-约旦消元,直到左边的矩阵变为单位矩阵,右边的矩阵即为所求的逆矩阵。

分块矩阵法: 分块矩阵法适用于分块矩阵的求逆,即将一个大的矩阵分成多个小的矩阵。其方法是将大矩阵A分成四个小矩阵A11、A12、A21、A22,并根据矩阵分块公式求出逆矩阵。文章来源地址https://www.toymoban.com/news/detail-663998.html

代码合集

import numpy as np


def func1():
    a = np.arange(12)
    b = a.reshape([3, 4])
    c = a.reshape([4, 3])
    # 矩阵b的第二维大小,必须等于矩阵c的第一维大小
    d = b.dot(c)  # 等价于 np.dot(b, c)
    # np.dot(b, c)
    print('a: \n{}'.format(a))
    print('b: \n{}'.format(b))
    print('c: \n{}'.format(c))
    print('d: \n{}'.format(d))

    # numpy.linalg  中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西
    # np.linalg.diag 以一维数组的形式返回方阵的对角线(或非对角线)元素,
    # 或将一维数组转换为方阵(非对角线元素为0)
    print("=========linalg test=========")
    e = np.diag(d)
    f = np.diag(e)
    print('d: \n{}'.format(d))
    print('e: \n{}'.format(e))
    print('f: \n{}'.format(f))

    # 计算对角线元素之和
    g = np.trace(d)
    print(g)
    # det,计算行列式
    h = np.linalg.det(d)
    print(h)
    # eig,计算特征值和特征向量
    i = np.linalg.eig(d)
    print(i)


def func2():
    # 计算方阵的逆
    # https://blog.51cto.com/u_15072903/3963066
    tmp = np.random.rand(3, 3)
    print(tmp)
    j = np.linalg.inv(tmp)
    print(j)

    print(tmp.dot(j))
    print(j.dot(tmp))


if __name__ == "__main__":
    # func1()
    func2()

到了这里,关于Numpy入门(3)—线性代数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法

    https://github.com/Chufeng-Jiang/Python-Linear-Algebra-for-Beginner/tree/main 单位向量叫做 u hat Vector.py _globals.py main_vector.py main_numpy_vector.py

    2024年02月08日
    浏览(41)
  • matlab 入门(三)线性代数

    在MATLAB中,用“A^n”来计算矩阵A的n次方, 用“sqrtm”函数来计算矩阵的开方 (sqrtm(A)求的是满足X*X=A的矩阵X。) 矩阵对数运算与矩阵指数运算互为逆运算, 可以分别用函数expm和logm来实现。 Expm: 以e为底对矩阵求指数,并不是对每个元素求指数,对每个元素求指数的指令是ex

    2024年01月19日
    浏览(44)
  • 线性代数入门:基础知识与实践

    线性代数是数学的一个分支,主要研究的是线性方程组和向量空间等概念。它在现代科学和工程领域中具有广泛的应用,如计算机图形学、机器学习、信号处理、金融等。线性代数的核心内容包括向量、矩阵、线性方程组的求解、向量空间等。在本文中,我们将从线性代数的

    2024年02月22日
    浏览(56)
  • 量子算法入门——2.线性代数与复数

    参考资料: 【【零基础入门量子计算-第03讲】线性代数初步与复数】 来自b站up:溴锑锑跃迁 建议关注他的更多高质量文章:CSDN:【溴锑锑跃迁】 强烈建议搭配b站原视频进行观看,这只是我当时看的笔记,读懂这堂课的内容可能需要:线性代数(初等变换、列向量)、离散

    2024年02月19日
    浏览(38)
  • pytorch入门2--数据预处理、线性代数的矩阵实现、求导

    数据预处理是指将原始数据读取进来使得能用机器学习的方法进行处理。 首先介绍csv文件: CSV 代表逗号分隔值(comma-separated values),CSV 文件就是使用逗号分隔数据的文本文件。 一个 CSV 文件包含一行或多行数据,每一行数据代表一个记录。每个记录包含一个或多个数值,

    2024年02月04日
    浏览(41)
  • 线性代数的学习和整理2:什么是线性,线性相关,线性无关 以及什么是线性代数?

    目录 1 写在前面的话 1.1 为什么要先总结一些EXCEL计算矩阵的工具性知识, 而不是一开始就从基础学起呢?  1.2 关于线性代数入门时的各种灵魂发问: 1.3 学习资料 2 什么是线性(关系)? 2.1 线性的到底是一种什么关系: 线性关系=正比例/正相关关系 ≠ 直线型关系 2.2 一次函数

    2024年02月10日
    浏览(53)
  • 线性代数的学习和整理2:什么是线性,线性相关,线性无关 及 什么是线性代数?

    目录 1 写在前面的话 1.1 为什么要先总结一些EXCEL计算矩阵的工具性知识, 而不是一开始就从基础学起呢?  1.2 关于线性代数入门时的各种灵魂发问: 1.3 学习资料 2 什么是线性(关系)? 2.1 线性的到底是一种什么关系: 线性关系=正比例/正相关关系 ≠ 直线型关系 2.2 一次函数

    2024年02月11日
    浏览(135)
  • 线性代数思维导图--线性代数中的线性方程组(1)

    1.解线性方程组 2.线性方程组解的情况 3.线性方程组的两个基本问题 1.阶梯型矩阵性质 2.简化阶梯型矩阵(具有唯一性) 3.行化简算法 4.线性方程组的解 1.R^2中的向量 2.R^2中的几何表示 3.R^n中的向量 4.线性组合与向量方程 5.span{v},span{u,v}的几何解释 1.定义 2.定理 3.解的存在性

    2024年02月02日
    浏览(88)
  • 【线性代数及其应用 —— 第一章 线性代数中的线性方程组】-1.线性方程组

    所有笔记请看: 博客学习目录_Howe_xixi的博客-CSDN博客 https://blog.csdn.net/weixin_44362628/article/details/126020573?spm=1001.2014.3001.5502 思维导图如下:  内容笔记如下:

    2024年02月06日
    浏览(64)
  • 线性代数的学习和整理15:线性代数的快速方法

       5  空间的同构 下面再谈谈同构。线性空间千千万,应如何研究呢?同构就是这样一个强大的概念,任何维数相同的线性空间之间是同构的,空间的维数是简单而深刻的,简单的自然数居然能够刻画空间最本质的性质。借助于同构,要研究任意一个n维线性空间,只要研究

    2024年02月11日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包