【易混区分】 tensor张量 Numpy张量的各种矩阵乘法、点积的函数对比 (dot, multiply,*,@matmul)

这篇具有很好参考价值的文章主要介绍了【易混区分】 tensor张量 Numpy张量的各种矩阵乘法、点积的函数对比 (dot, multiply,*,@matmul)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 矩阵运算基本概念

1.1 点积

又称为数量积、标量积(scalar product)或者内积(inner product)

它是指实数域中的两个向量运算得到一个实数值标量的二元运算。也就是对应元素的位置相乘

举例:

对于向量 a = ( x 1 , y 1 ) 和 b = ( x 2 , y 2 ) ,他们的点积就是 a ⋅ b = x 1 x 2 + y 1 y 2 a=(x_1,y_1)和b=(x_2,y_2),他们的点积就是a·b=x_1x_2+y_1y_2 a=(x1,y1)b=(x2,y2),他们的点积就是ab=x1x2+y1y2

1.2 矩阵乘法

两个运算的矩阵需要满足矩阵乘法规则,即需要前一个矩阵的列和后一个矩阵的行相等

一般我们用矩阵运算

就是Numpy的ndarray和torch的tensor张量 两种矩阵形式进行运算

他们大体相同,有一些小的差异,比如numpy的dot可以实现高维度的矩阵乘法但是torch的dot不可以

下表详细比较了他们之间的差异

运算 形式 实现结果 返回结果
dot函数 numpy.dot(a,b) torch.dot(a,b) numpy的dot 可以实现一维度点积及高唯度的矩阵乘法,而torch的dot只能实现一维度点积,不能实现高维度矩阵乘法(报错RuntimeError: 1D tensors expected, but got 2D and 2D tensors) 对应位置会加起来,往往返回会是一个数字
multiply()函数 等价于 * numpy.multiply(a,b) torch.multiply(a,b) a*b 点乘(和dot不同的是乘完之后不会加起来)返回往往是一个矩阵,两个矩阵必须形状一致 对应位置乘完之后不会加起来,往往返回是一个矩阵
matmul()函数等价于@ numpy.matmul(a,b) torch.matmul(a,b) 或者torch.mm(a,b) a@b 矩阵乘法 往往返回是一个矩阵

具体看下面的例子

2 dot()

numpy和torch的dot 可以用在一维的数组相乘,此时相当于两个数组的点积。

例1

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

输出

20

numpy的dot也可以用在多维数组的相乘,此时是矩阵乘法,所以需要满足矩阵乘法的运算规则,需要前一个矩阵的列和后一个矩阵的行相等

例2

import numpy as np
a=np.array([[1,2,3],
           [1,2,3]])
b=np.array([[2,3],
           [3,4],
           [5,6]])
print(np.dot(a,b))

输出

[[23 29]
[23 29]]

但是torch的dot就会报错

例3

a=torch.tensor([[1,2,3,4],[1,2,3,4]])
b=torch.tensor([[5,6],[7,8],[5,6],[7,8]])
print(a.ndim,b.ndim)
print(torch.dot(a,b))

输出

RuntimeError: 1D tensors expected, but got 2D and 2D tensors

3 multiply() 和 *

两个运算都是相当于点乘,可以实现一维或高维度的点积,参与运算的两个矩阵必须形状一致

(和dot不同的是乘完之后不会加起来)返回往往是一个矩阵

import numpy as np
a=np.array([[1,2,3],
           [1,2,3]])
b=np.array([[2,3,4],
           [3,4,5]],)
print("multiply:")
print(np.multiply(a,b))
print("*:")
print(a*b)

输出

multiply:
[[ 2 6 12]
[ 3 8 15]]
*:
[[ 2 6 12]
[ 3 8 15]]

4 matmul和@

matmul 是matrix multiply的缩写,专门用于矩阵乘法,需要满足矩阵乘法的运算规则,需要前一个矩阵的列和后一个矩阵的行相等

import numpy as np
a=np.array([[1,2,3],
           [1,2,3]])
b=np.array([[2,3],
           [3,4],
           [5,6]])
print("matmul:")
print(np.matmul(a,b))
print("@:")
print(a@b)

输出

matmul:
[[23 29]
[23 29]]
@:
[[23 29]
[23 29]]

注意这里的行向量可以列向量,比如

a=np.array([[1,2,3],
[1,2,3]])
b=np.array([2,3,4])

我们如果把b看做1行3列的矩阵,则运算不符合运算规则,但是如果看做3行1列的矩阵,则它是正确的,即2*3 × 3 * 1=2 * 1 即最后会输出一维的向量

import numpy as np
a=np.array([[1,2,3],
           [1,2,3]])
b=np.array([2,3,4])
print("matmul:")
print(np.matmul(a,b))

输出

matmul:
[20 20]

在PyTorch中,有几种执行矩阵乘法的方式,包括torch.matmultorch.mm@运算符。这些方法之间有一些区别,让我们逐个解释它们:

  1. torch.matmul:

    • torch.matmul是PyTorch中用于执行矩阵乘法的通用函数。
    • 它支持广播(broadcasting),可以处理不同形状的输入矩阵。
    • 对于两个二维矩阵,torch.matmul等效于矩阵乘法。
    • 对于高维张量,torch.matmul会在合适的维度上进行广播,以进行张量间的乘法。
    import torch
    
    A = torch.tensor([[1, 2], [3, 4]])
    B = torch.tensor([[5, 6], [7, 8]])
    
    result = torch.matmul(A, B)
    
  2. torch.mm:

    • torch.mm是专门用于两个二维矩阵相乘的函数,不支持广播。
    • 输入的两个矩阵必须是二维的,并且符合矩阵乘法的规则。
    import torch
    
    A = torch.tensor([[1, 2], [3, 4]])
    B = torch.tensor([[5, 6], [7, 8]])
    
    result = torch.mm(A, B)
    
  3. @运算符:

    • @运算符在PyTorch中被重载,用于执行矩阵乘法。
    • 类似于torch.matmul,它支持广播操作。
    import torch
    
    A = torch.tensor([[1, 2], [3, 4]])
    B = torch.tensor([[5, 6], [7, 8]])
    
    result = A @ B
    

总结:文章来源地址https://www.toymoban.com/news/detail-824412.html

  • 如果你希望使用通用的矩阵乘法函数,并且想要支持广播,可以使用torch.matmul@运算符。
  • 如果你知道你的输入是二维矩阵且不需要广播,可以使用torch.mm
  • 通常来说,推荐使用torch.matmul@运算符,因为它们更通用,而torch.mm仅限于二维矩阵。

到了这里,关于【易混区分】 tensor张量 Numpy张量的各种矩阵乘法、点积的函数对比 (dot, multiply,*,@matmul)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 将图结构转换矩阵数据转换为PyTorch支持的张量类型时,出现错误AttributeError ‘Tensor‘ object has no attribute ‘todense‘

    将图结构转换矩阵数据转换为PyTorch支持的张量类型时,出现错误AttributeError: ‘Tensor’ object has no attribute ‘todense’ 实例来源于《PyTorch深度学习和图神经网络 卷1》实例26:用图卷积神经网络为论文分类 出错部分p284页 原代码: 错误提示: ​ 找了一圈没有一样的解决方案,但

    2024年02月13日
    浏览(28)
  • 矩阵乘法优化:1x4矩阵块的各种优化方法

    文件名 优化方法 gFLOPs 峰值占比 线程数 MMult1.h 无任何优化 0.24gflops 2.1% 1 MMult2.h 一次计算4个元素 0.24gflops 2.1% 1 MMult_1x4_3.h 一次计算4个元素 0.24gflops 2.1% 1 MMult_1x4_4.h 一次计算4个元素 0.24gflops 2.1% 1 MMult_1x4_5.h 一次计算4个元素(将4个循环合并为1个) 0.25gflops 2.2% 1 MMult_1x4_7.h 一次计

    2024年02月15日
    浏览(35)
  • 深度学习·理论篇(2023版)·第002篇深度学习和计算机视觉中的基础数学知识01:线性变换的定义+基于角度的线性变换案例(坐标变换)+点积和投影+矩阵乘法的几何意义+图形化精讲

    💕 恭喜本博客浏览量达到两百万,CSDN内容合伙人,CSDN人工智能领域实力新星~ 🧡 本文章为2021版本迭代更新版本,在结合有效知识的基础上对文章进行合理的增加,使得整个文章时刻顺应时代需要 🧡 本专栏将通过系统的深度学习实例,从可解释性的角度对深度学习的原理

    2023年04月08日
    浏览(40)
  • 【深度学习】 NumPy详解(三):数组数学(元素、数组、矩阵级别的各种运算)

    目录 一、前言 二、实验环境 三、NumPy 0、多维数组对象(ndarray) 多维数组的属性 1、创建数组 2、数组操作 3、数组数学 1. 元素级别 a. 直接运算 b. 加法:np.add()函数 c. 减法:np.subtract()函数 d. 乘法:np.multiply()函数 e. 除法:np.divide()函数 f. 幂运算:np.power()函数 g. 取余与求商

    2024年02月03日
    浏览(31)
  • PyTorch核心--tensor 张量 !!

    文章目录 前言 张量的概念 1. 张量的定义 2. 张量的属性 3. 张量的形状 张量的原理 1. 存储(storage) 2. 形状(shape) 3. 步幅(stride) 张量的操作 1. 数学运算 2. 逻辑运算 3. 索引和切片 4. 形状操作 5. 广播 总结 在PyTorch中,张量是核心数据结构,它是一个多维数组,类似Numpy中

    2024年01月23日
    浏览(30)
  • Python_Numpy库中各种矩阵基本运算(加、减、乘、点乘、点除、乘方、转置等)

    Numpy中矩阵基本运算的实现。 示例代码如下: 运行结果如下: 示例代码如下: 运行结果如下: 示例代码如下: 运行结果如下: 示例代码如下: 运行结果如下: 示例代码如下: 运行结果如下: 实现元素乘法有两种方法,一是用乘号,二是用函数multiply()。 下面的示例代码

    2024年01月25日
    浏览(25)
  • 【深度学习】pytorch——Tensor(张量)详解

    笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ Tensor,又名张量。它可以是一个数(标量)、一维数组(向量)、二维数组(矩阵)和更高维的数组(高阶数据)。Tensor和Numpy的ndarrays类似,但PyTorch的tensor支持GPU加速。 官方文档 : https://pytorch.org/docs/stable/tensors.html

    2024年02月06日
    浏览(30)
  • 神经网络|张量tensor(待完善)

    张量是用来探究一个点在各个切面(一共三个切面)和各个方向(x,y,z三个方向)上的受力情况。 所以一共有九种情况,可以用一个3x3的矩阵进行存储。 探究长方体内某一个节点的受力情况 用来构造图的Data要求使用tensor的结构进行传入,需要用tensor去构造点的属性,点的

    2024年01月16日
    浏览(36)
  • 百度飞桨(PaddlePaddle)- 张量(Tensor)

    张量(Tensor)、标量(scalar)、向量(vector)、矩阵(matrix) 飞桨 使用张量(Tensor) 来表示神经网络中传递的数据 ,Tensor 可以理解为多维数组,类似于 Numpy 数组(ndarray) 的概念。与 Numpy 数组相比,Tensor 除了支持运行在 CPU 上,还支持运行在 GPU 及各种 AI 芯片上,以实现

    2024年02月03日
    浏览(36)
  • 【PyTorch】PyTorch中张量(Tensor)计算操作

    第五章 PyTorch中张量(Tensor)计算操作 上文介绍了PyTorch中 张量(Tensor) 的 拆分 和 拼接 操作,本文将介绍 张量 的 计算 操作。 函数 描述 torch.allclose() 比较两个元素是否接近 torch.eq() 逐元素比较是否相等 torch.equal() 判断两个张量是否具有相同的形状和元素 torch.ge() 逐元素比较大

    2024年02月20日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包