[Python] numpy中运算符* @ mutiply dot的用法分析

NumPy-@运算符详解 随着Python 3.5引入的`@`运算符,NumPy对矩阵运算的支持迎来了更简洁的语法糖,这个运算符专门用于矩阵乘法,兼具可读性和高效性,成为处理线性代数问题的首选工具。本文我将从语法特性、核心机制、应用场景等维度,全面解析`@`运算符的核心用法 阅读详情
AI摘要

本文深入解析了Numpy中*、@、.dot和np.multiply运算符的区别与应用场景,通过对比ndarray和matrix类型下的运算结果,揭示了这些运算符在矩阵乘法与点乘运算中的特性。

引言:
最近同学在做机器学习作业时,代码中遇到了* @ np.mutiply .dot这个几个numpy的运算,发现有点晕,于是我在这里做几个简单的对比,以及列举需要注意的问题


首先先给一个比较简单的用法解释:
*:               根据数据类型的不同,可能是做点乘运算,也可能做矩阵乘法运算
@:               只做矩阵乘法运算
.dot:          只做矩阵乘法运算
np.mutiply:只做点乘运算


为了说明上述结论的正确性,下面首先对ndarray数据类型进行运算操作

In [1]: import numpy as np

In [2]: a = np.array(np.arange(4)).reshape(2,2)

In [3]: b = a

In [4]: a
Out[4]:
array([[0, 1],
       [2, 3]])

In [5]: b
Out[5]:
array([[0, 1],
       [2, 3]])

In [6]: np.multiply(a, b)
Out[6]:
array([[0, 1],
       [4, 9]])

In [7]: a * b
Out[7]:
array([[0, 1],
       [4, 9]])

In [8]: a.dot(b)
Out[8]:
array([[ 2,  3],
       [ 6, 11]])
In [9]: a @ b
Out[9]:
array([[ 2,  3],
       [ 6, 11]])

如果array不是方阵,我们再运行测试,得到如下结果

In [16]: a = np.array(np.arange(6)).reshape(3,2)

In [17]: a
Out[17]:
array([[0, 1],
       [2, 3],
       [4, 5]])

In [18]: b = a.T

In [19]: b
Out[19]:
array([[0, 2, 4],
       [1, 3, 5]])

In [20]: b * a
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-20-245d0d068c2b> in <module>()
----> 1 b * a

ValueError: operands could not be broadcast together with shapes (2,3) (3,2)

In [21]: np.multiply(b, a)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-23-bae4ae98f8ad> in <module>()
----> 1 np.multiply(b, a)

ValueError: operands could not be broadcast together with shapes (2,3) (3,2)
In [22]: b.dot(a)
Out[22]:
array([[20, 26],
       [26, 35]])

In [23]: b @ a
Out[23]:
array([[20, 26],
       [26, 35]])

从上面可以发现,针对ndarray而言:
* 和 np.multiply 只能做点乘运算,当运算符两边的数据维度无法满足点乘运算结果时,就会报错
@和.dot 只能做矩阵乘法运算


然后再对matrix数据类型进行运算操作

In [27]: a = np.matrix(np.arange(4)).reshape(2,2)

In [28]: a
Out[28]:
matrix([[0, 1],
        [2, 3]])

In [29]: b = a

In [30]: b
Out[30]:
matrix([[0, 1],
        [2, 3]])

In [31]: a * b
Out[31]:
matrix([[ 2,  3],
        [ 6, 11]])

In [32]: np.multiply(a,b)
Out[32]:
matrix([[0, 1],
        [4, 9]])

In [33]: a @ b
Out[33]:
matrix([[ 2,  3],
        [ 6, 11]])

In [34]: a.dot(b)
Out[34]:
matrix([[ 2,  3],
        [ 6, 11]])
In [35]: c = np.matrix(np.arange(6)).reshape(3,2)

In [36]: d = c.T

In [37]: c
Out[37]:
matrix([[0, 1],
        [2, 3],
        [4, 5]])

In [38]: d
Out[38]:
matrix([[0, 2, 4],
        [1, 3, 5]])

In [39]: np.multiply(d, c)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-39-6c3683491fc6> in <module>()
----> 1 np.multiply(d, c)

ValueError: operands could not be broadcast together with shapes (2,3) (3,2)

从上面可以发现,针对matrix而言:
* 会做矩阵乘法运算
而 np.multiply 依然只能做点乘运算,当运算符两边的数据维度无法满足点乘运算结果时,就会报错。
@和.dot 依旧保持只做矩阵乘法运算


总结:
为了防止记混或者出错,有以下建议:

  1. 只使用@来做矩阵乘法运算
  2. 只使用np.multiply来做点乘运算
  3. 在使用其他框架,类似于tensorflow或者pytorch,建议先针对这四个运算法运算一遍,明白其运算逻辑再Coding!

如果觉得我有地方讲的不好的或者有错误的欢迎给我留言,谢谢大家阅读(点个赞我可是会很开心的哦)~

别再混淆了!NumPy中@、*和dot的区别详解(附性能对比测试) 本文详细解析了NumPy中@、*和dot三种运算符的核心区别与适用场景,包括矩阵乘法、元素级运算和向量点积。通过实际性能测试数据,帮助开发者理解在不同维度数组和高维广播情况下的最佳选择策略,提升数值计算效率。 阅读详情

相关推荐

别再傻傻分不清了!Numpy里*、@、np.dot、np.matmul到底啥区别?一个例子全搞定

本文详细解析了Numpy中常见的乘法操作符`*`、`@`、`np.dot`和`np.matmul`的区别与应用场景。通过真实案例和代码示例,帮助开发者理解元素级乘法与矩阵乘法的关键差异,避免常见错误,并提供了操作符选择的最佳实践和性能优化建议。

weixin_33270920的博客 354

python:@运算符(numpy库中的运算符)

前言 我在《python数学实验与建模》这本书中发现了@运算符,这可真是个奇怪的符号!我大量的尝试与查资料后,终于揭开这个@的意义 一、@运算符 1.仅仅支持数组运算 因此,必须用到numpy.array()才能使用这个运算符 2.这是python3.5后的新运算符 它与numpy.dot()的作用是一样的,矩阵乘法(就是线性代数里学的)! 举个例子: from numpy import array,dot a=array([[1,2], [1,2]]) b=array([[5,6],

若丶尘的博客 2万+

NumPy-@运算符实战指南:从基础矩阵运算到深度学习应用

本文详细介绍了NumPy中@运算符的使用方法,从基础矩阵乘法到深度学习中的高维数组运算。通过实际案例展示了@运算符在矩阵运算、批次处理和广播机制中的优势,帮助开发者编写更简洁高效的代码,特别适合深度学习项目中的矩阵操作需求。

weixin_29056701的博客 384

numpy中的dot()运算以及@运算,* 运算存在的意义

本文中您将了解到: 1. `np.dot()`都能做哪些运算? 2. 为什么`np.dot()`已经能完成各种运算却还要加入`@`和`*`这两种运算?它们存在的意义是什么? 3. 等价写法这么多,我该用哪个?

weixin_44962342的博客 2508

Rasa Core开发指南

文章目录1. Rasa Core简介1.1 Rasa Core消息处理流程1.2 安装Rasa Core2. Dialogue模型训练2.1 Story样本数据2.2 Domain2.2.0 intents2.2.1 actions2.2.2 templates2.2.3 entities2.2.4 slots3 .训练和使用对话模型3.1 训练对话模型3.2 使用对话模型4. 搭建CustomA...

老蒋也疯狂 1万+

ADS谐波平衡仿真自动优化报错?三步搞定HB控件设置(附常见错误排查)

本文针对ADS谐波平衡仿真在自动优化中常见的报错问题,提供了三步核心排查法。首先检查并禁用HB控件中可能导致冲突的小信号仿真模式,其次合理化仿真频率与扫描参数设置,最后审视优化变量与目标的定义。通过精准配置HB控件以适配自动优化流程,能有效解决大多数仿真失败问题,确保非线性电路设计顺利进行。

c2d3e4f的博客 786

【Python】 numpy中运算符* @ mutiply dot的用法分析

https://blog.csdn.net/Invokar/article/details/89532476 引言: 最近同学在做机器学习作业时,代码中遇到了*@np.mutiply.dot这个几个numpy的运算,发现有点晕,于是我在这里做几个简单的对比,以及列举需要注意的问题 首先先给一个比较简单的用法解释:*:根据数据类型的不同,可能是做点乘运算,也可能做矩阵乘法运算@:只做矩阵乘法运算.dot:只做矩阵乘...

mjiansun的专栏 1161

u3d逆向学习之纯C内存读写与ImGui绘制(Android)

方法:需要在/proc/pid/maps文件查找模块名,一行行遍历所有内存,第一个参数为模块名,第二个参数为索引index(因为该模块会有多个,index为正序遍历第index个该模块),若找到了则使用。32位游戏的指针大小采用4字节,而64位游戏的指针大小采用8字节(这里需要注意),数据地址以16进制存储,使用unsigned long类型 ,该函数只有一个参数,数据地址,返回该地址的指针跳转地址。文件,比较其中的内容是否与传入的包名相同,如果相同,则返回该进程的PID。

zhoujunjie2004的博客 1686

numpy中的矩阵乘法:numpy中运算符* @ mutiply dot的用法

前言 在完成作业的过程中,对multiply函数、*运算符号、dot函数的功能经常混淆。在这里做一个简单的区分,并不一定严谨。每个函数对于数组和矩阵的操作内容也存在差异。 本博客只是针对常见的用法,例如矩阵传播机制并不进行考虑,如果需要透彻理解这些操作,可以转到别的博客学习,这里只做最简单的应用区分。 import numpy as np m = np.array([[1, 2, 3], [4, 5, 6]]) n = np.array([[1, 2, 3], [4, 5, 6]]) print("矩阵m:

Phoenix_ZengHao的博客 4447

TestFlight分发测试app,提示无法安装 所请求的App不可用或者不存在

TestFlight分发测试app,提示无法安装 所请求的App不可用或者不存在

天穹云原生 9168

Syzkaller实战教程2:运行环境配置+实例运行

本文详细介绍了在linux系统上搭建Syzkaller内核模糊测试环境的完整流程。 1.环境配置:通过VMware创建Ubuntu20.04虚拟机A,配置QEMU/KVM虚拟化环境,安装Go语言工具链和Syzkaller; 2.内核编译:下载Linux内核源码并配置KCOV等调试选项,编译生成带覆盖率支持的bzImage内核镜像; 3.测试环境构建:使用debootstrap创建Debian虚拟机镜像,通过QEMU启动嵌套虚拟机B; 实例测试: 4.演示两种测试场景 - 提供完整上手教程

cuguanren的博客 1374

Numpy计算中的@、*、mutiply、dot的区分(含Python代码)

Numpy计算中的@、*、mutiply、dot的区分(含Python代码)

wzk4869的博客 2012

RDKit | 基于Pytorch和RDKit建立QSAR模型

QSAR 定量构效方法(quantitative structure-activity relationship, QSAR)是应用最为广泛的药物设计方法。所谓定量构效方法就是通过一些数理统计方法建立其一系列化合物的生理活性或某种性质与其物理化学性质之间的定量关系,通过这些定量关系。可以预测化合物的生理活性或某些性质,指导我们设计出具有更高活性的化合物。 早在...

DrugOne 5076

【好记性不如烂笔头】numpy计算中@、*、mutiply、dot、zip(*list)

dot == @ 是矩阵乘法; a = np.array([[4,5],[6,7]]) b = np.array([[2,0],[1,0]]) np.dot(a,b) == a @ b a.dot(b) == np.dot(a,b) # 矩阵a 乘 矩阵b mutiply == * 是指对应位置相乘; a = np.array([[4,5],[6,7]]) b = np.array([[2,0],[1,0]]) a * b == np.multiply(a, b) ...

因为遇见你,我,三生有幸呀 363

2025年CSP-J复赛真题及题解:T4 多边形(polygon)

2025年CSP-J复赛真题及题解:T4 多边形(polygon)

王老师青少年编程 1716

使用安卓的IMU数据进行 行人航位推算(PDR)推算步长 附python 代码

加速度计数据、陀螺仪数据、重力传感器数据、姿态仰角数据。数据分析与定位轨迹生成主要使用Python离线完成。示意图。

三维点云技术探索 1912

np.dot,np.mutiply,*区别; np.array和mat的区别

np.mutiply,无论是数组还是矩阵只执行对应位置相乘,若a,b对应位置不存在,则报错 np.dot 当a,b为矩阵时,执行矩阵乘法,a,b需满足矩阵乘法的条件 当a,b为数组时,若a,b秩为1,则执行数组对应位置相乘,最后取和 若a,b秩不为一,则执行矩阵乘法 * 若a,b为数组,则对应位置相乘 若a,b为矩阵,则执行矩阵乘法 下图中a,b为数组: 当a,b是矩阵时,a*b执行...

小肥柴YD的博客 1306

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

numpy矩阵相乘@的用法

numpy矩阵相乘@的用法

学而时习之 2万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

关于Numpy的特殊符号@和矩阵运算

在Numpy中,看到了@符号,但是无论是google搜索或者baidu搜索,由于@符号是一个特殊字符,所以很难检索到答案。其实很简单,他就是Numpy库中的一个操作符,在numpy库的说明中,落在numpy.matmul的条目中。在Python 3.5之后引入,用以执行numpy.matmul。说起matmul函数,顾名思义就是矩阵乘法,这个函数其实是大名鼎鼎的numpy.dot点乘的一个子集。根据dot函数的说明,

amuro_ray027的博客 1016

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

numpy常用乘法函数总结:np.dot()、np.multiply()、*、np.matmul()、@、np.prod()、np.outer()

np.dot() 向量点积+矩阵乘法;np.multiply() 或者 * 在array下均为元素对位乘,但在mat/matrix下后者变为矩阵乘法;np.matmul() 或者 @ 完全等价,为矩阵乘法;np.prod() 返回数组中元素的乘积,可指定axis;np.outer() 外积,拿第一个向量的元素分别与第二个向量所有元素相乘得到的结果的一行,以此类推

qq_43629945的博客 1万+

[python]numpy 中的@运算

【代码】[python]numpy 中的@运算。

condom10010的博客 868

Numpy基础知识(2)

narray的flat属性概念用法使用flat属性遍历数组中的所有元素使用flat属性修改数组中的所有元素使用flat属性将数组变换成一维flatten()概念用法展平数组,将数组变换成一维flatten创建原数组的一维副本,可以看到通过flatten得到的对象与原数组不是同一个对象参数order概念用法ravel()概念用法展平数组,将数组变换成一维ravel创建原数组的一维视图,可以看到通过ravel是原数组的一个视图参数order概念用法。

Kommisasr的博客 1038

numpy中"*"、outer、dot、multiply的用法和区别

1、关于 "*" 的用法; "*" 也为对于元素的乘积,但是 "*" 作为乘法运算时,必须满足 numpy 的 broadcasting(广播) 的原则 ,当两个矩阵相乘时,其法则为两矩阵的对应的元素相乘,其用法与multiply相同( 见后介绍 ) 。 例1:矩阵 a*b 相乘,其中 a 为 3*4,b 为 1*4; import numpy as np a = np.arra...

汤姆鱼 3728

Python——@运算符

numpy库中的用于numpy数组进行矩阵乘法的运算符

Williamcsj的博客 258

python@运算符 numpy矩阵相乘

python@运算符 numpy矩阵相乘

jacke121的专栏 1999

超详细的图解 Numpy,不收藏后悔!

一个 Numpy是关于机器学习,数据处理的Python基础库,了解 NumPy 的工作原理可以提高你的编码效率,可以让你的代码看上去更加简洁和优雅。NumPy 也可以GPU上运行代码而无需更改原始代码(或只做少量更改)。NumPy 的核心概念是 多维数组。它的美妙之处在于,无论数组有多少维,大多数操作看起来都是一样的。但是 1D 和 2D 的情况有点特殊。Numpy 数组与 Python 列表(list)粗看上去,NumPy 数组类似于 Python 列表。

weixin_42608414的博客 5255
上一篇: Python变量引用浅析
下一篇: person ReID(行人重识别)2018CVPR paper阅读笔记
大鲨鱼冲鸭
博客等级 码龄9年 249粉丝 185原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值