向量和矩阵的点乘和叉乘

向量和矩阵的点乘和叉乘向量定义 向量是由 N 个实数组成的一行 N 列或 N 行一列的的数组 点乘 又叫做点积 内积 数量积 标量积 向量 a a1 a2 an 和向量 b b1 b2b bn 点乘的结果是一个标量 记作 a b 几何解释 a b a b 故而点乘可以计算出两个向量的夹角 且向量垂直 点乘结果为零 叉乘 又叫向量积 外积 叉积 叉乘 向量 a x1 y1 z1 和向量 b x2 y2 z2 叉乘的运算结果是一个向量 并且两个向量的叉积与这两个向量组成的坐标平面垂直 记作 axb 计算方式

向量


定义:向量是由N个实数组成的一行N列或N行一列的的数组。

  • 点乘:又叫做点积、内积、数量积、标量积,向量a[a1,a2,…,an]和向量b[b1,b2b…,bn]点乘的结果是一个标量,记作a.b

向量和矩阵的点乘和叉乘

几何解释:a.b = |a| |b| cos \theta,故而点乘可以计算出两个向量的夹角,且向量垂直,点乘结果为零。

  • 叉乘:又叫向量积、外积、叉积,叉乘,向量a[x1,y1,z1]和向量b[x2,y2,z2]叉乘的运算结果是一个向量,并且两个向量的叉积与这两个向量组成的坐标平面垂直,记作axb

计算方式:利用行列式方式,设i[1,0,0],j[0,1,0],k[0,0,1],则如下图:

向量和矩阵的点乘和叉乘

向量和矩阵的点乘和叉乘

几何解释:axb =  |a| |b| sin \Theta,故两个向量平行,则其叉乘等于零。

几何意义:叉积的长度|a×b|可以解释成这两个叉乘向量ab共起点时,所构成平行四边形的面积。

Numpy实现向量的点乘和叉乘

点乘需要用到numpy库的dot函数,得到一个标量。叉乘需要用到numpy库的cross函数。

In [1]: import numpu as np In [2]: a = np.array([1,2,3]) In [3]: b = np.array([2,2,3]) In [4]: np.dot(a,b) Out[4]: 15 In [5]: np.cross(a,b) Out[5]: array([ 0, 3, -2]) 

矩阵直接使用*相乘的处理方式是向量对应位置相乘,维数不变,它与np.multiply函数效果一样,均是元素相乘。

In [6]: a*b Out[6]: array([2, 4, 9]) In [7]: np.multiply(a,b) Out[7]: array([2, 4, 9]) 

矩阵


定义:是一个按照长方阵列排列的复数或实数集合。

  • 矩阵点乘:是矩阵各个对应元素相乘, 这个时候要求两个矩阵必须同样大小。
  • 矩阵叉乘:矩阵的乘法就是矩阵a的第m行乘以矩阵b的第n列,各个元素对应相乘然后求和作为第m行n列元素的值。

Numpy实现矩阵的点乘和叉乘

矩阵的点乘直接使用*号即可,也可以使用 numpy库的multiply函数,叉乘使用dot函数,这与向量相反

In [1]: a = np.array([[1,2],[3,4]]) In [2]: b = np.array([[5,6],[7,8]]) In [3]: a*b Out[3]: array([[ 5, 12], [21, 32]]) In [4]: np.dot(a,b) Out[4]: array([[19, 22], [43, 50]]) In [34]: np.multiply(a,b) Out[34]: array([[ 5, 12], [21, 32]])

总结Numpy库


numpy库的对象有数组和矩阵,两者看起来长得差不多,但在性质、运算上有很大不同。可通过array函数mat函数相互转化。

  • dot函数

对于秩为1的数组,执行对应位置相乘,然后再相加,等价于向量的点乘

对于秩不为1的二维数组,执行矩阵乘法运算,等价于矩阵的叉乘

  • multiply函数

数组和矩阵对应位置相乘,输出与相乘数组/矩阵的大小一致,效果上与运算符*对数组效果一样。

  • 运算符*号

对数组执行对应位置相乘,等价于multiply函数

对矩阵执行矩阵乘法运算,等价于dot函数

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207552.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午1:37
下一篇 2026年3月19日 下午1:38


相关推荐

  • 玩转SpringSession,重要知识点全面剖析(续篇)

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:怀瑾握瑜 www.cnblogs.com/lxyit/p/9672097.html 上一篇文章中介绍了Spri…

    2021年6月26日
    96
  • php递归算法经典实例_php用递归求n的阶乘

    php递归算法经典实例_php用递归求n的阶乘<?phpheader(‘content-type:text/html;charset=utf8’);//遍历目录:递归遍历functionmyflie($dir){is_dir($dir)ordie("当前目录不存在");//是文件夹,读取全部内容$f=scandir($dir);foreach($fas$file){…

    2022年8月11日
    10
  • Python 根据AIC准则定义向前逐步回归进行变量筛选(二)

    Python 根据AIC准则定义向前逐步回归进行变量筛选(二)Python根据AIC准则定义向前逐步回归进行变量筛选(二)AIC简介AIC即赤池值,是衡量模型拟合优良性和模型复杂性的一种标准,在建立多元线性回归模型时,变量过多,且有不显著的变量时,可以使用AIC准则结合逐步回归进行变量筛选。AICD数学表达式如下:AIC=2p+n(log(SSE/n))AIC=2p+n(log(SSE/n))AIC=2p+n(log(SSE/n))其中,ppp…

    2022年5月24日
    184
  • 如何查看计算机中的端口占用情况,电脑如何查看端口是否被占用?CMD查看端口占用开放情况…「建议收藏」

    如何查看计算机中的端口占用情况,电脑如何查看端口是否被占用?CMD查看端口占用开放情况…「建议收藏」端口是很多软件和服务用于通讯的,但是实际上会有很多软件或服务端口使用同一个端口,这就导致一个端口被占用后,另一个也需要该端口的应用无法正常工作,那么如何查看端口被占用呢?这里我们可以使用CMD命令来查看。查看端口是否被占用方法:一、打开CMD命令提示符,然后使用“netstat–an|findstr21”确认端口被占用(上面的21可以改成你要查看的端口);listening”“closing”…

    2022年5月19日
    62
  • JVM进阶(十一):JAVA G1收集器

    JVM进阶(十一):JAVA G1收集器JVM进阶(十一)——JAVAG1收集器  在前两篇博文中讲解了新生代和年老代的收集器,在本篇博文中介绍一个收集范围涵盖整个堆的收集器——G1收集器。先讲讲G1收集器的特点,他也是个多线程的收集器,能够充分利用多个CPU进行工作,收集方式也与CMS收集器类似,因此不会有太久的停顿。  虽然回收的范围是整个堆,但还是有分代回收的回收方式。在年轻代依然采用复制算法;年老代也同样采用“标记-清除

    2022年6月13日
    28
  • C语言多线程编程一

    C语言多线程编程一C 语言多线程编程一 c 语言中有一个函数可以实现简单的多线程编程 它的函数原型为 uintptr t beginthread void start address void unsignedstac size void arglist Parameters 参数 start address 程序执行一个新线程的起始地址 即你写的执行函数名 Startaddress

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号