使用Numpy解决线性代数问题

本文详细介绍了如何使用Numpy进行线性代数操作,包括矩阵乘法、内积、矩阵对应位置相乘、求逆、解线性方程组、行列式计算、特征值和特征向量的求解以及矩阵对角化。同时,文章讨论了实对称矩阵对角化的充分必要条件。
摘要由CSDN通过智能技术生成

numpy中的线性代数内容

  • 矩阵乘法
  • 内积
  • 矩阵对应位置相乘
  • 矩阵的逆
  • 求线性方程组的解
  • 求行列式
  • 特征向量和特征值
  • 矩阵对角化

1. 矩阵乘法 np.dot(a,b) 和 np.matmul(a,b)

两者只有在a,b能否为标量上有区别,其他都基本相同。
np.matmul(a,b)是严格数学意义上的矩阵乘法,输入必须是arrays,标量是不允许的。
np.dot(a,b) 是允许a,b是标量的,不妨称之为广义上的矩阵乘法a*b,排除标量的情形,两者运算的前提条件可以简单概括为:a的列数要等于b的行数
但是当a,b分别为一维向量的时候,有会有些不同,但是总体上来说仍然是满足上述规则。有三种情况
n p . d o t ( a , b ) = { a 是 常 数 : b 的 维 数 没 有 任 何 限 制 a 是 向 量 : 如 果 l e n ( a ) = l e n ( b ) a 是 矩 阵 : 如 果 l e n ( a [ 0 ] ) = l e n ( b ) np.dot(a,b) = \begin{cases} a是常数: & b的维数没有任何限制\\ a是向量: & 如果 len(a) = len(b) \\ a是矩阵: & 如果 len(a[0]) = len(b) \\ \end{cases} np.dot(a,b)=aaablen(a)=len(b)len(a[0])=len(b)

n p . m a t m u l ( a , b ) = { a 是 常 数 : 不 可 以 , a , b 都 必 须 是 数 组 a 是 向 量 : 如 果 l e n ( a ) = l e n ( b ) a 是 矩 阵 : 如 果 l e n ( a [ 0 ] ) = l e n ( b ) np.matmul(a,b) = \begin{cases} a是常数: & 不可以,a,b都必须是数组\\ a是向量: & 如果 len(a) = len(b) \\ a是矩阵: & 如果 len(a[0]) = len(b) \\ \end{cases} np.matmul(a,b)=aaaa,blen(a)=len(b)len(a[0])=len(b)

1.1 a为常数时

a为常数时,np.dot(a, b)相当于对b中的每个元素都乘以a

import numpy as np
a = 2
b = np.array([[1,2],[3,4]])
np.dot(a, b), np.dot(b, a)
(array([[2, 4],
        [6, 8]]),
 array([[2, 4],
        [6, 8]]))
np.matmul(a,b) ## -> 不可以, a,b必须是arrays
---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-61-aaf37998a60c> in <module>
----> 1 np.matmul(a,b) ## -> 不可以


ValueError: matmul: Input operand 0 does not have enough dimensions (has 0, gufunc core with signature (n?,k),(k,m?)->(n?,m?) requires 1)

1.2 a为向量时

np.dot(a,b)可行的前提条件是:len(a) == len(b)
乘法结果维度是 R 1 × l e n ( b [ 0 ] ) R^{1\times len(b[0])} R1×len(b[0]), 乘法过程是a中第i个元素乘以b中的第i个中括号内元素,得到一个和b[0]一样长度的向量,然后将所有这样的向量相加即可得到结果。即 c = ∑ i = 0 l e n ( a ) a [ i ] × b [ i ] c = \sum_{i=0}^{len(a)}a[i]\times b[i] c=

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值