np.dot()函数的用法详解


Posted in Python onJanuary 17, 2020

基本简介

dot函数为numpy库下的一个函数,主要用于矩阵的乘法运算,其中包括:向量内积、多维矩阵乘法和矩阵与向量的乘法。

1. 向量内积

向量其实是一维的矩阵,两个向量进行内积运算时,需要保证两个向量包含的元素个数是相同的。

例1:

import numpy as np

x = np.array([1, 2, 3, 4, 5, 6, 7])
y = np.array([2, 3, 4, 5, 6, 7, 8])
result = np.dot(x, y)
print(result)

输出结果:

168

计算过程就是将向量中对应元素相乘,再相加所得。即普通的向量乘法运算。

2. 矩阵乘法运算

两个矩阵(x, y)如果可以进行乘法运算,需要满足以下条件:
x为 m×n 阶矩阵,y为 n×p 阶矩阵,
则相乘的结果 result 为 m×p 阶矩阵。

例2:

import numpy as np

x = np.array([[1, 2, 3],
   [3, 4, 4]])
y = np.array([[0, 1, 1, 1],
   [1, 2, 0, 1],
   [0, 0, 2, 1]])
result = np.dot(x, y)

print(result)
print("x阶数:" + str(x.shape))
print("y阶数:" + str(y.shape))
print("result阶数:" + str(result.shape))

结果为:

[[ 2  5  7  6]
 [ 4 11 11 11]]
x阶数:(2, 3)
y阶数:(3, 4)
result阶数:(2, 4)

dot(x, y)不等于dot(y, x),矩阵乘法不满足交换律

例3:

import numpy as np

x = np.array([[1, 2],
   [3, 4]])
y = np.array([[2, 2],
   [1, 2]])
result1 = np.dot(x, y)
result2 = np.dot(y, x)

print("result1 = " + str(result1))
print("result2 = " + str(result2))

结果为:

result1 = [[ 4  6]
           [10 14]]
result2 = [[ 8 12]
           [ 7 10]]

如果不满足运算前提,都不可以运算。例2的dot(y,x)不满足运算条件,因此运算会报错。

例4:

import numpy as np

x = np.array([[1, 2, 3],
   [3, 4, 4]])
y = np.array([[0, 1, 1, 1],
   [1, 2, 0, 1],
   [0, 0, 2, 1]])
result = np.dot(y, x)

print(result)

结果为:

Traceback (most recent call last):
  File "numpy1.py", line 96, in <module>
    result = np.dot(y,x)
  File "<__array_function__ internals>", line 6, in dot
ValueError: shapes (3,4) and (2,3) not aligned: 4 (dim 1) != 2 (dim 0)

3. 矩阵与向量乘法

矩阵x为m×n阶,向量y为n阶向量,则矩阵x和向量y可以进行乘法运算,结果为m阶向量。进行运算时,会首先将后面一项进行自动转置操作,之后再进行乘法运算。

例5:

import numpy as np

x = np.array([[1, 2, 3],
   [3, 4, 4]])
y = np.array([1, 2, 3])
result = np.dot(x, y)

print(result)
print("x阶数:" + str(x.shape))
print("y阶数:" + str(y.shape))
print("result阶数:" + str(result.shape))

结果为:

[14 23]
x阶数:(2, 3)
y阶数:(3,)
result阶数:(2,)

例6:仍然不满足交换律

import numpy as np

x = np.array([[1, 2, 3],
   [3, 4, 4],
   [0, 1, 1]])
y = np.array([1, 2, 3])
result1 = np.dot(x, y) # 1×1 + 2×2 + 3×3 = 14(result1的第一个元素)
result2 = np.dot(y, x) # 1×1 + 2×3 + 3×0 = 7 (result2的第一个元素)

print("result1 = " + str(result1))
print("result2 = " + str(result2))

结果为:

result1 = [14 23  5]
result2 = [ 7 13 14]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python正则匹配抓取豆瓣电影链接和评论代码分享
Dec 27 Python
Python3 加密(hashlib和hmac)模块的实现
Nov 23 Python
python3安装pip3(install pip3 for python 3.x)
Apr 03 Python
python得到qq句柄,并显示在前台的方法
Oct 14 Python
在Python中居然可以定义两个同名通参数的函数
Jan 31 Python
python利用selenium进行浏览器爬虫
Apr 25 Python
python文字转语音的实例代码分析
Nov 12 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
Mar 27 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
Aug 03 Python
Django中和时区相关的安全问题详解
Oct 12 Python
如何用PyPy让你的Python代码运行得更快
Dec 02 Python
Opencv中cv2.floodFill算法的使用
Jun 18 Python
python使用numpy实现直方图反向投影示例
Jan 17 #Python
对python中 math模块下 atan 和 atan2的区别详解
Jan 17 #Python
python 计算方位角实例(根据两点的坐标计算)
Jan 17 #Python
Python autoescape标签用法解析
Jan 17 #Python
flask利用flask-wtf验证上传的文件的方法
Jan 17 #Python
Python with标签使用方法解析
Jan 17 #Python
Python运行DLL文件的方法
Jan 17 #Python
You might like
Syphon 使用方法
2021/03/03 冲泡冲煮
php写的简易聊天室代码
2011/06/04 PHP
PHP静态调用非静态方法的应用分析
2013/05/02 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
PHP echo()函数讲解
2019/02/15 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
利用JS重写Cognos右键菜单的实现代码
2010/04/11 Javascript
jquery 关于event.target使用的几点说明介绍
2013/04/26 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
深入理解JavaScript系列(29):设计模式之装饰者模式详解
2015/03/03 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
JavaScript实现鼠标点击后层展开效果的方法
2015/05/13 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
无限循环轮播图之运动框架(原生JS实现)
2017/10/01 Javascript
VueJs监听window.resize方法示例
2018/01/17 Javascript
使用JavaScript生成罗马字符的实例代码
2018/06/08 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
JS使用Dijkstra算法求解最短路径
2019/01/17 Javascript
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
Python中使用ConfigParser解析ini配置文件实例
2014/08/30 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
法学专业个人求职信
2013/09/26 职场文书
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
顶岗实习接收函
2014/01/09 职场文书
团日活动策划书
2014/02/01 职场文书
师说教学反思
2014/02/07 职场文书
房屋财产继承协议书范本
2014/11/03 职场文书
教师党员学习群众路线心得体会
2014/11/04 职场文书
我的中国梦主题班会
2015/08/14 职场文书
学生病假条怎么写
2015/08/17 职场文书
《刷子李》教学反思
2016/02/20 职场文书
公司与个人合作协议书
2016/03/19 职场文书
变长双向rnn的正确使用姿势教学
2021/05/31 Python
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫