IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Numpy线性代数-numpy.matmul() -> 正文阅读

[人工智能]Numpy线性代数-numpy.matmul()

前言

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

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

相关函数介绍

numpy.dot()numpy.dot()

numpy.vdotnumpy.vdot()

numpy.inner()numpy.inner()

numpy.determinant()numpy.determinant()

numpy.matmul()numpy.matmul()

numpy.inv()numpy.inv()

numpy.solve()numpy.solve()

numpy.matmul()

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

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

matmuldot的差异主要在两个方面:

  • 不允许乘标量,只能用*代替
  • 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)
[[ 7 10]
 [15 22]]

计算公式:

1 × 1 + 2 × 3 1\times 1 + 2\times 3 1×1+2×3, 1 × 2 + 2 × 4 1\times 2 + 2\times 4 1×2+2×4

3 × 1 + 4 × 3 3\times 1 + 4\times 3 3×1+4×3, 3 × 2 + 4 × 4 3\times 2 + 4\times 4 3×2+4×4

二维和一维运算

a = [[1,2],[3,4]] 
b = [1,2] 
print (np.matmul(a,b)) #b被提升为(2,1)的矩阵 b=[[1],[2]] a*b=[[5],[11]],去掉为1的维度变成[5,11]
print (np.matmul(b,a)) #b被提升为(1,2)的矩阵 b=[[1,2]] a*b=[[7,10]],去掉为1的维度变成[7,10]
[ 5 11]
[ 7 10]

维度大于二的数组

如果某一个参数是 n ( n > 2 ) ) n(n>2)) n(n>2))维的,该参数 n n n被看作一些矩阵(参数的最后两个维数为矩阵维数)的stack,而且计算时会相应的广播。

a = np.arange(2*3*4).reshape((2,3,4))
b = np.arange(2*4*3).reshape((2,4,3))
c = np.arange(1*3*4).reshape((1,4,3))
print("矩阵a:",'\n',a)
print("矩阵b:",'\n',b)
print("矩阵c:",'\n',c)

矩阵a: 
 [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
矩阵b: 
 [[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]
  [ 9 10 11]]

 [[12 13 14]
  [15 16 17]
  [18 19 20]
  [21 22 23]]]
矩阵c: 
 [[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]
  [ 9 10 11]]]
  • a多维数组,被当作两个 3 × 4 3\times 4 3×4矩阵。
  • b多维数组,被当作两个 4 × 3 4\times 3 4×3矩阵。
  • c多维数组,被当作一个 4 × 3 4\times 3 4×3矩阵

np.matmul(a,b)会将a的第一个矩阵和b的第一个矩阵相乘,将a的第二个矩阵b的第二个矩阵相乘,最终得到一个 2 × 3 × 3 2\times 3\times 3 2×3×3的矩阵。

ans=np.matmul(a,b)
print(ans)
[[[  42   48   54]
  [ 114  136  158]
  [ 186  224  262]]

 [[ 906  960 1014]
  [1170 1240 1310]
  [1434 1520 1606]]]

np.matmul(a,c)c只有一个矩阵,所以它会广播一个矩阵(即复制一个原本c矩阵后两维的矩阵),这样c就变成了 2 × 4 × 3 2\times 4\times 3 2×4×3的矩阵,可以与a相乘得到一个 2 × 3 × 3 2\times 3\times 3 2×3×3的矩阵。

ans=np.matmul(a,c)
print(ans)
[[[ 42  48  54]
  [114 136 158]
  [186 224 262]]

 [[258 312 366]
  [330 400 470]
  [402 488 574]]]

乘一个标量是不被允许的,只能用*代替。

a=np.array([1,2])
print(np.matmul(a, 3))
---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-23-9a91f367630a> in <module>
      1 a=np.array([1,2])
----> 2 print(np.matmul(a, 3))


ValueError: matmul: Input operand 1 does not have enough dimensions (has 0, gufunc core with signature (n?,k),(k,m?)->(n?,m?) requires 1)
print(a*3)
[3 6]
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:35:19  更:2022-03-22 20:39:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:26:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码