numpy.linalg--线性代数基础

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

numpy.linalg–线性代数基础

NumPy提供了线性代数函数库linalg,该库包含了线性代数所需的所有功能,可以看看下面的说明。

方法 注释
dot 两数组的点积
vdot 两向量的点积
inner 两数组的内积
determinant 数组的行列式
matmul 两数组的矩阵积
inv 求矩阵的逆
solve 求解线性矩阵方程

numpy.dot()

对于两个数组(一维),计算的是这两个数组对应下标元素的乘积和(内积)
对于二维数组,计算的是两个数组的矩阵乘积
对于多维数组,结果数组中的每个元素都是:数组a的最后一维上的所有元素与数组b的倒数第二维上的所有元素的乘积和: dot ⁡ ( a , b ) [ i , j , k , m ] = sum ⁡ ( a [ i , j , : ] ∗   b [ k , : , m ] ) \operatorname{dot}(\mathrm{a}, \mathrm{b})[\mathrm{i}, \mathrm{j}, \mathrm{k}, \mathrm{m}]=\operatorname{sum}(\mathrm{a}[\mathrm{i}, \mathrm{j},:] * \mathrm{~b}[\mathrm{k},:, \mathrm{m}]) dot(a,b)[i,j,k,m]=sum(a[i,j,:] b[k,:,m])

参数:np.dot(a,b,out=None)

  • a,b:数组
  • out:可选,用于存储计算结果

A = [ a 11 a 12 a 21 a 22 ] , B = [ b 11 b 12 b 21 b 22 ] \mathrm{A}=\left[\begin{array}{ll} a 11 & a 12 \\ a 21 & a 22 \end{array}\right], \mathrm{B}=\left[\begin{array}{ll} b 11 & b 12 \\ b 21 & b 22 \end{array}\right] A=[a11a21a12a22],B=[b11b21b12b22]

import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[1, 3], [2, 3]])
print(np.dot(A, B))

c 11 = a 11 ∗ b 11 + a 12 ∗ b 21 c11 = a11 * b11 + a12 * b21 c11=a11b11+a12b21
c 12 = a 11 ∗ b 12 + a 12 ∗ b 22 c12 = a11 * b12 + a12 * b22 c12=a11b12+a12b22
c 21 = a 21 ∗ b 11 + a 21 ∗ b 21 c21 = a21 * b11 + a21 * b21 c21=a21b11+a21b21
c 22 = a 21 ∗ b 12 + a 21 ∗ b 22 c22 = a21 * b12 + a21 * b22 c22=a21b12+a21b22

numpy.vdot()

vdot(a, b) 函数处理复数的方式与 dot(a, b) 不同。如果第一个参数是复数,则第一个参数的复共轭用于计算点积。
注意numpy.vdot处理多维数组的方式不同于numpy.dot: 确实不是执行矩阵乘积,但首先将输入参数展平为一维向量。因此,它应该只用于向量。
参数:

  • a: array_like
    如果 a 是复数,则在计算点积之前取复共轭。

  • b: array_like
    点积的第二个参数。

返回:

  • output: ndarray
    a 和 b 的点积。可以是 int 浮点数,也可以是复数,具体取决于 a 和 b 的类型。
a = np.array([1+2j,3+4j])
b = np.array([5+6j,7+8j])
np.vdot(a, b)
(70-8j)
np.vdot(b, a)
(70+8j)

numpy.inner()

从字面上来看是矩阵的内积,但是在运算方法上来看却不是,我们先来代码实践一下:

import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[1, 3], [2, 3]])
print(np.inner(A, B))

c 11 = a 11 ∗ b 11 + a 12 ∗ b 12 c11 = a11 * b11 + a12 * b12 c11=a11b11+a12b12
c 12 = a 11 ∗ b 21 + a 12 ∗ b 22 c12 = a11 * b21 + a12 * b22 c12=a11b21+a12b22
c 21 = a 21 ∗ b 11 + a 22 ∗ b 12 c21 = a21 * b11 + a22 * b12 c21=a21b11+a22b12
c 22 = a 21 ∗ b 21 + a 22 ∗ b 22 c22 = a21 * b21 + a22 * b22 c22=a21b21+a22b22

numpy.linalg.det()

对于 2 × 2 2\times 2 2×2矩阵,它是左上和右下元素的乘积与其他两个的乘积的差.对于矩阵 [ [ a , b ] , [ c , d ] ] [[a,b],[c,d]] [[ab][cd]],行列式计算为 a d − b c ad-bc adbc.较大的方阵被认为是 2 × 2 2\times 2 2×2矩阵的组合。

计算 2 × 2 2 \times 2 2×2矩阵的行列式

import numpy as np
a = np.array([[1,2], [3,4]]) 
ans = np.linalg.det(a) #1*4-2*3=-2
print(ans)
---------------------
-2.0000000000000004

计算 3 × 3 3\times 3 3×3矩阵的行列

b = np.array([[6, 1, 1], [4, -2, 5], [2, 8, 7]])
ans = np.linalg.det(b)
print(ans)
print(6*(-2*7 - 5*8) - 1*(4*7 - 5*2) + 1*(4*8 - -2*2))
----------------
-306.0
-306

numpy.matmul()

numpy.matmul()函数返回两个数组的矩阵乘积:

  • 如果任一参数的维数大于2,则将其视为存在于最后两个索引的矩阵的栈,并进行相应广播。
  • 如果任一参数是一维数组,则通过在其维度上附加 1 来将其提升为矩阵,矩阵相乘之后会将为1的维数去掉。

matmul与dot的差异主要在两个方面:

  • 不允许乘标量,只能用*代替
  • matmul操作的矩阵允许将最后两个索引的矩阵的栈广播
import numpy as np
a=np.array([[1,2],[3,4]])
b=np.array([[1,2],[3,4]])
ans=np.matmul(a,b)
print(ans)

numpy.inv()

函数计算矩阵的乘法逆矩阵。
逆矩阵:设 A A A是数域上的一个 n n n阶矩阵,若在相同数域上存在另一个 n n n阶矩阵B,使得: A B = B A = E AB=BA=E AB=BA=E,则我们称 B B B A A A的逆矩阵,而 A A A则被称为可逆矩阵。注: E E E为单位矩阵。

import numpy as np 
a=np.array([[1,2],[3,4]])
b=np.linalg.inv(a)
print("矩阵a:",'\n',a)
print("矩阵b:",'\n',b)
print(np.dot(a,b))
-----------------------
矩阵a: 
 [[1 2]
 [3 4]]
矩阵b: 
 [[-2.   1. ]
 [ 1.5 -0.5]]
[[1.0000000e+00 0.0000000e+00]
 [8.8817842e-16 1.0000000e+00]]

numpy.solve()

函数用于求解矩阵形式的线性方程的解。
比如线性方程:
2 x + 2 y + 2 z = 5 2 y + 4 z = − 3 2 x + 5 y − 2 z = 26 \begin{aligned} & 2 \mathrm{x}+2 \mathrm{y}+2 \mathrm{z}=5 \\ & 2 \mathrm{y}+4 \mathrm{z}=-3 \\ & 2 \mathrm{x}+5 \mathrm{y}-2 \mathrm{z}=26 \end{aligned} 2x+2y+2z=52y+4z=32x+5y2z=26
可以使用矩阵进行表示:
[ 2 2 2 0 2 4 2 5 − 2 ] [ x y z ] = [ 5 − 3 26 ] \left[\begin{array}{ccc} 2 & 2 & 2 \\ 0 & 2 & 4 \\ 2 & 5 & -2 \end{array}\right]\left[\begin{array}{l} \mathrm{x} \\ \mathrm{y} \\ \mathrm{z} \end{array}\right]=\left[\begin{array}{c} 5 \\ -3 \\ 26 \end{array}\right] 202225242 xyz = 5326
A X = B → X = A − 1   B A X=B \rightarrow X=\mathrm{A}^{-1} \mathrm{~B} AX=BX=A1 B文章来源地址https://www.toymoban.com/news/detail-433139.html

a = np.array([[2,2,2],[0,2,4],[2,5,-2]])
b = np.array([[5], [-3], [26]])
print("A^-1B", np.linalg.solve(a,b))
-------------------
A^-1B:
 [[ 1.45]
 [ 3.6 ]
 [-2.55]]

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

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

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

相关文章

  • NumPy 特性:n维数组上的线性代数

    在阅读本教程之前,您应该对 Python 有一定的了解。如果您想恢复记忆,请参考 Python 教程。 如果您想要运行本教程中的示例,您还应该在计算机上安装 matplotlib 和 SciPy。 本教程适用于对线性代数和 NumPy 中的数组有基本了解,并希望了解如何表示和操作 n 维数组的人。特别是

    2024年03月18日
    浏览(46)
  • 线性代数-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日
    浏览(42)
  • 线性代数基础【4】线性方程组

    定理1 设A为mXn矩阵,则 (1)齐次线性方程组AX=0 只有零解的充分必要条件是r(A)=n; (2)齐次线性方程组AX=0 有非零解(或有无数个解)的充分必要条件是r(A)<n 推论1 设A为n阶矩阵,则 (1)齐次线性方程组AX=0只有零解的充分必要条件是|A|≠0; (2)齐次线性方程组AX=0有非零解(或有无数个解)的

    2024年02月01日
    浏览(71)
  • 线性代数的学习和整理2:线性代数的基础知识(整理ing)

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

    2024年02月14日
    浏览(69)
  • 线性代数基础--矩阵

     矩阵是由排列在矩形阵列中的数字或其他数学对象组成的表格结构。它由行和列组成,并且在数学和应用领域中广泛使用。 元素:矩阵中的每个数字称为元素。元素可以是实数、复数或其他数学对象。 维度:矩阵的维度表示矩阵的行数和列数。一个 m × n 的矩阵有 m 行和

    2024年02月11日
    浏览(47)
  • 线性代数基础【2】矩阵

    一、基本概念 ①矩阵 像如下图示的为矩阵,记为A=(aij)m*n ②同型矩阵及矩阵相等 若A、B为如下两个矩阵 如果A和B的行数和列数相等,那么A和B为同型矩阵,且A和B的元素相等(即:aij=bij),则称A和B相等 ③伴随矩阵 设A为n阶矩阵(如上图所示),设A的行列式|A|,则A中aij的余子式为Mij,代数余

    2024年02月04日
    浏览(53)
  • 线性代数基础知识

    计算机视觉一些算法中常会用到线性代数的一些知识,为了便于理解和快速回忆,博主这边对常用的一些知识点做下整理,主要来源于如下这本书籍。 1.  矩阵不仅仅是数字排列而已,不然也不会有那么大精力研究它。其可以表示一种映射  关于映射,变换的一些帖子可以参

    2024年02月03日
    浏览(60)
  • 机器学习线性代数基础

    本文是斯坦福大学CS 229机器学习课程的基础材料,原始文件下载 原文作者:Zico Kolter,修改:Chuong Do, Tengyu Ma 翻译:黄海广 备注:请关注github的更新,线性代数和概率论已经更新完毕。 1. 基础概念和符号 线性代数提供了一种紧凑地表示和操作线性方程组的方法。 例如,以

    2024年02月13日
    浏览(48)
  • 基础线性代数——千足虫

    题目来源 公元 2333 2333 2333 年 2 2 2 月 3 3 3 日,在经历了 17 17 17 年零 3 3 3 个月的漫长旅行后,“格纳格鲁一号”载人火箭返回舱终于安全着陆。此枚火箭由美国国家航空航天局(NASA)研制发射,行经火星、金星、土卫六、木卫二、谷神星、“张衡星”等 23 23 23 颗太阳系星球

    2024年04月13日
    浏览(34)
  • 线性代数基础--向量

    目录 向量的概念 基本概念 抽象概念 向量的意义  几何意义 物理意义 欧式空间 特点和性质  行向量与列向量 行向量 列向量 两者的关系 向量的基本运算与范数 向量的基本运算 向量的加法 数乘运算(实数与向量相乘) 转置 向量的范数 向量的模与内积 向量的模 向量的内积

    2024年02月11日
    浏览(57)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包