python np.dot()、np.multiply()、np.matmul()、@、*的用法与区别
创始人
2024-03-12 12:50:45
0

这里写自定义目录标题

  • 基本概念
    • 点积
    • 矩阵乘法
  • np.dot()与@
    • 秩为1的情况
    • 秩不为1的情况
  • np.multiply()
    • 与数组相乘
    • 与矩阵相乘
  • np.matmul()
  • *
    • 数组相乘
    • 矩阵相乘

基本概念

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

点积

点积:指实数域中的两个向量运算得到一个实数值标量。
对于向量a=(x1,y1)和向量b=(x2,y2),它们的点积表示为a⋅b=x1x2+y1y2。对于向量a=(x_1,y_1)和向量b=(x_2,y_2),\\它们的点积表示为a\cdot b=x_1x_2+y_1y_2。 对于向量a=(x1​,y1​)和向量b=(x2​,y2​),它们的点积表示为a⋅b=x1​x2​+y1​y2​。

矩阵乘法

两个矩阵运算需要满足矩阵乘法的规则,即前一个矩阵的列数等于后一个矩阵的行数。
矩阵A=[a11a12a21a22],矩阵B=[b11b12b21b22]AB=[a11∗b11+a12∗b21a11∗b12+a12∗b22a21∗b11+a22∗b21a21∗b12+a22∗b22]矩阵A=\begin{bmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{bmatrix},矩阵B=\begin{bmatrix} b_{11} & b_{12} \\ b_{21} & b_{22} \end{bmatrix} \\ AB=\begin{bmatrix} a_{11}*b_{11}+a_{12}*b_{21} & a_{11}*b_{12}+a_{12}*b_{22} \\ a_{21}*b_{11}+a_{22}*b_{21} & a_{21}*b_{12}+a_{22}*b_{22} \end{bmatrix} 矩阵A=[a11​a21​​a12​a22​​],矩阵B=[b11​b21​​b12​b22​​]AB=[a11​∗b11​+a12​∗b21​a21​∗b11​+a22​∗b21​​a11​∗b12​+a12​∗b22​a21​∗b12​+a22​∗b22​​]

np.dot()与@

np.dot()与@的用法相同。
对于秩为1的数组,执行点积运算;
对于秩不为1的二维数组,执行矩阵乘法;

秩为1的情况

dot

>>> A = np.arange(1,5)
>>> A
array([1, 2, 3, 4])>>> B = np.arange(0,4)
>>> B
array([0, 1, 2, 3])>>> np.dot(A,B)
20

@

>>> A = np.arange(1,4)
>>> A
array([1, 2, 3])>>> B = np.arange(0,3)
>>> B
array([0, 1, 2])>>> A@B
8

秩不为1的情况

dot

>>> A = np.arange(1,5).reshape(2,2)
>>> A
array([[1, 2],[3, 4]])>>> B = np.arange(0,4).reshape(2,2)
>>> B
array([[0, 1],[2, 3]])>>> np.dot(A,B)
array([[ 4,  7],[ 8, 15]])

@

>>> A = np.arange(1,7).reshape(2,-1)
>>> A
array([[1, 2, 3],[4, 5, 6]])>>> B = np.arange(1,7).reshape(-1,2)
>>> B
array([[1, 2],[3, 4],[5, 6]])>>> (np.mat(A))@(np.mat(B))
matrix([[22, 28],[49, 64]])

np.multiply()

数组与矩阵对应位置相乘,输出与相乘的矩阵or数组大小相同

与数组相乘

A = np.arange(1,5).reshape(2,2)
>>> A
array([[1, 2],[3, 4]])>>> B = np.arange(0,4).reshape(2,2)
>>> B
array([[0, 1],[2, 3]])>>> np.multiply(A,B)
array([[ 0,  2],[ 6, 12]])

与矩阵相乘

数组会自适应按列相乘还是按行相乘。

>>> A = np.arange(1,3).reshape(2,1)
>>> A
array([[1],[2]])>>> B
array([[0, 1],[2, 3]])>>> np.multiply(A,np.mat(B))
matrix([[0, 1],[4, 6]])>>> A
array([[1, 2]])>>> B
array([[0, 1],[2, 3]])>>> np.multiply(A,np.mat(B))
matrix([[0, 2],[2, 6]])

去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

np.matmul()

matmul是matrix multiply的缩写,所以他是专门用于矩阵乘法的函数。

>>> A = np.arange(1,7).reshape(2,-1)
>>> A
array([[1, 2, 3],[4, 5, 6]])>>> B = np.arange(1,7).reshape(-1,2)
>>> B
array([[1, 2],[3, 4],[5, 6]])>>> np.matmul(np.mat(A), np.mat(B))
matrix([[22, 28],[49, 64]])

*

对数组执行对应位置相乘
对矩阵执行矩阵相乘

数组相乘

>>> A
array([1, 2, 3])>>> B
array([0, 1, 2])>>> A*B
array([0, 2, 6])

矩阵相乘

>>> A = np.arange(1,5).reshape(2,2)
>>> A
array([[1, 2],[3, 4]])>>> B = np.arange(0,4).reshape(2,2)
>>> B
array([[0, 1],[2, 3]])>>> (np.mat(A))*(np.mat(B))
matrix([[ 4,  7],[ 8, 15]])

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...