以下代码的前提:import numpy as np

线性代数(如矩阵乘法、矩阵分解、行列式以及其他方阵数学等)是任何数组库的重要组成部分。numpy提供了一个用于矩阵乘法的dot函数(既是一个数组方法也是numpy命名空间中的一个函数)。

矩阵乘法官方说明:numpy.dot — NumPy v1.21 Manual

 1 >>> x = np.array([[1, 2, 3], [4, 5, 6]])
2 >>> y = np.array([[1, 2], [3, 4], [5, 6]])
3 >>> x
4 array([[1, 2, 3],
5 [4, 5, 6]])
6 >>> y
7 array([[1, 2],
8 [3, 4],
9 [5, 6]])
10 >>> np.dot(x, y)
11 array([[22, 28],
12 [49, 64]])
13 >>> x.dot(y)
14 array([[22, 28],
15 [49, 64]])
16 >>>

numpy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西。

 1 >>> from numpy.linalg import inv, qr
2 >>> X = np.arange(9).reshape(3, 3)
3 >>> X
4 array([[0, 1, 2],
5 [3, 4, 5],
6 [6, 7, 8]])
7 >>> mat = X.T.dot(X)
8 >>> mat
9 array([[45, 54, 63],
10 [54, 66, 78],
11 [63, 78, 93]])
12 >>> inv(mat)
13 array([[ 3.51843721e+13, -7.03687442e+13, 3.51843721e+13],
14 [-7.03687442e+13, 1.40737488e+14, -7.03687442e+13],
15 [ 3.51843721e+13, -7.03687442e+13, 3.51843721e+13]])
16 >>> mat.dot(inv(mat))
17 array([[ 0.79296875, 1. , -0.2109375 ],
18 [ 0.1484375 , 1. , -0.046875 ],
19 [-0.74609375, 1. , 0.6171875 ]])
20 >>> q, r = qr(mat)
21 >>> q
22 array([[-0.47673129, 0.77849894, 0.40824829],
23 [-0.57207755, 0.07784989, -0.81649658],
24 [-0.66742381, -0.62279916, 0.40824829]])
25 >>> r
26 array([[-9.43927963e+01, -1.15559666e+02, -1.36726535e+02],
27 [ 0.00000000e+00, -1.40129810e+00, -2.80259620e+00],
28 [ 0.00000000e+00, 0.00000000e+00, 3.55271368e-15]])
29 >>>

下表是常用的numpy.linalg函数。

方法 说明
diag 以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0)
dot 矩阵乘法
trace 计算对角线元素的和
det 计算矩阵行列式
eig 计算方阵的本征值和本征向量
inv 计算方阵的逆
solve 解线性方程组Ax=b,其中A为一个方阵
lstsq 计算Ax=b的最小二乘解

numpy.diag — NumPy v1.21 Manual

numpy.diag(v, k=0):取矩阵主对角线的值,k=0,取主对角线;k>0,取主对角线之上;k<0,取主对角线之下。

>>> x = np.arange(9).reshape(3, 3)
>>> x
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> np.diag(x)
array([0, 4, 8])
>>> np.diag(x, k=1)
array([1, 5])
>>> np.diag(x, k=-1)
array([3, 7])
>>> np.diag(np.diag(x))
array([[0, 0, 0],
[0, 4, 0],
[0, 0, 8]])

numpy.trace — NumPy v1.21 Manual

矩阵的迹:矩阵主对角线元素之和。

>>> x = np.eye(3)
>>> x
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
>>> x.trace()
3.0

numpy.linalg.det — NumPy v1.21 Manual

矩阵(必须是方阵)行列式的值:The determinant of a 2-D array [[a, b], [c, d]] is ad - bc:

>>> a = np.array([[1, 2], [3, 4]])
>>> a
array([[1, 2],
[3, 4]])
>>> np.linalg.det(a)
-2.0000000000000004

numpy.linalg.eig — NumPy v1.21 Manual

方阵的本征值和本征向量:

>>> from numpy import linalg as LA
>>> x = np.diag((1, 2, 3))
>>> x
array([[1, 0, 0],
[0, 2, 0],
[0, 0, 3]])
>>> w, v = LA.eig(x)
>>> w; v
array([1., 2., 3.])
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])

numpy.linalg.inv — NumPy v1.21 Manual

矩阵的逆:设A是一个n阶矩阵,若存在另一个n阶矩阵B,使得:AB=BA=E ,则称方阵A可逆,并称方阵B是A的逆矩阵。

>>> from numpy.linalg import inv
>>> a = np.array([[1., 2.], [3., 4.]])
>>> a
array([[1., 2.],
[3., 4.]])
>>> ainv = inv(a)
>>> ainv
array([[-2. , 1. ],
[ 1.5, -0.5]])

numpy.linalg.solve — NumPy v1.21 Manual

解线性方程组Ax=b,其中A为一个方阵。

>>> a = np.array([[1, 2], [3, 5]])
>>> b = np.array([1, 2])
>>> x = np.linalg.solve(a, b)
>>> x
array([-1., 1.])

numpy基础--线性代数的更多相关文章

  1. 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算

    http://www.cnblogs.com/batteryhp/p/5000104.html 第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说, ...

  2. 利用Python进行数据分析——Numpy基础:数组和矢量计算

    利用Python进行数据分析--Numpy基础:数组和矢量计算 ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组 对整组数据进行快速运算的标准数学函数,无需for-loop 用于读写 ...

  3. 《利用Python进行数据分析·第2版》第四章 Numpy基础:数组和矢量计算

    <利用Python进行数据分析·第2版>第四章 Numpy基础:数组和矢量计算 numpy高效处理大数组的数据原因: numpy是在一个连续的内存块中存储数据,独立于其他python内置对 ...

  4. [学习笔记] Numpy基础 系统学习

    [学习笔记] Numpy基础 上专业选修<数据分析程序设计>课程,老师串讲了Numpy基础,边听边用jupyter敲了下--理解+笔记. 老师讲的很全很系统,有些点没有记录,在PPT里就不 ...

  5. NumPy 基础知识·翻译完成

    原文:Numpy Essentials 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 ApacheCN 面试求职交流群 7241 ...

  6. 【学习笔记】 第04章 NumPy基础:数组和矢量计算

    前言 正式开始学习Numpy,参考用书是<用Python进行数据清洗>,计划本周五之前把本书读完,关键代码全部实现一遍 NumPy基础:数组和矢量计算 按照书中所示,要搞明白具体的性能差距 ...

  7. 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片

    概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...

  8. 算法库:基础线性代数子程序库(Basic Linear Algebra Subprograms,BLAS)介绍

    调试DeepFlow光流算法,由于作者给出的算法是基于Linux系统的,所以要在Windows上运行,不得不做大量的修改工作.移植到Windows平台,除了一些头文件找不到外,还有一些函数也找不到.这 ...

  9. numpy 基础操作

    Numpy 基础操作¶ 以numpy的基本数据例子来学习numpy基本数据处理方法 主要内容有: 创建数组 数组维度转换 数据选区和切片 数组数据计算 随机数 数据合并 数据统计计算 In [1]: ...

  10. Numpy 基础

    Numpy 基础 参考https://www.jianshu.com/p/83c8ef18a1e8 import numpy as np 简单创建数组 # 创建简单列表 a = [1, 2, 3, 4 ...

随机推荐

  1. Redis为什么是单线程还支持高并发

    Redis为什么设计成单线程模式因为redis是基于内存的读写操作,所以CPU不是性能瓶颈,而单线程更好实现,所以就设计成单线程模式 单线程模式省却了CPU上下文切换带来的开销问题,也不用去考虑各种锁 ...

  2. shell编程实现用户循环输入

    如果你想在Shell脚本中实现一个循环判断用户输入是否正确,并根据情况决定是否退出系统,可以使用一个无限循环(如while true)和条件语句来实现. 以下是一个示例代码,用于演示这种情况: #!/ ...

  3. Java学生信息管理系统源码

    学生信息管理系统 功能说明 学生信息管理,包括学生.班级.院系.课程.成绩等的管理. 本程序仅供学习食用. 工程环境 JDK IntelliJ IDEA MySQL 运行说明 1.安装JDK. 2.导 ...

  4. pyaudio音频录制python

    python3.7不支持pyaudio pip在线安装 whl下载地址:https://github.com/intxcc/pyaudio_portaudio/releases 下载后使用pip离线安 ...

  5. HarmonyOS NEXT应用开发——Navigation开发 页面切换场景范例

    简介 在应用开发时,我们常常遇到,需要在应用内多页面跳转场景时中使用Navigation导航组件做统一的页面跳转管理,它提供了一系列属性方法来设置页面的标题栏.工具栏以及菜单栏的各种展示样式.除此之外 ...

  6. 重新定义容器化 Serverless 应用的数据访问

    简介: 本文首先聚焦到 AI 和大数据等应用 Serverless 化的最大挑战:计算和存储分离架构带来的数据访问延迟和远程拉取数据带宽巨大的挑战.尤其在 GPU 深度学习训练场景中,迭代式的远程读取 ...

  7. 如何用 Nacos 构建服务网格生态

    ​简介: Nacos 在阿里巴巴起源于 2008 年五彩石项目(该项目完成微服务拆分和业务中台建设),成长于十年的阿里双十一峰值考验,这一阶段主要帮助业务解决微服务的扩展性和高可用问题,解决了百万实例 ...

  8. C# 二进制数组与结构体的互转

    本文将告诉大家在 dotnet 里面的二进制基础处理知识,如何在 C# 里面将结构体数组和二进制数组进行相互转换的简单方法 尽管本文属于基础入门的知识,但是在阅读之前还请自行了解 C# 里面的结构体内 ...

  9. STM32F10x 串口使用DMA

    一.DMA简介 DMA(Direct Memory Access,直接存储器访问) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载.否则,CPU 需要 ...

  10. AtCoder Beginner Contest 333

    总结 人生第一次掉rating 各种降智操作 A 水题 B 逆天操作 WA了3发 第三次交的时候以为过了,等到切完E发现怎么B还没过( #include<bits/stdc++.h> us ...