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中使用xlrd、xlwt操作excel表格详解
Jan 29 Python
Python的Flask框架中实现登录用户的个人资料和头像的教程
Apr 20 Python
Python通过matplotlib画双层饼图及环形图简单示例
Dec 15 Python
pandas.loc 选取指定列进行操作的实例
May 18 Python
python实现linux下抓包并存库功能
Jul 18 Python
python数据批量写入ScrolledText的优化方法
Oct 11 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
Aug 06 Python
基于django传递数据到后端的例子
Aug 16 Python
Python paramiko模块使用解析(实现ssh)
Aug 30 Python
Python中的sys.stdout.write实现打印刷新功能
Feb 21 Python
python使用XPath解析数据爬取起点小说网数据
Apr 22 Python
Python 操作pdf pdfplumber读取PDF写入Exce
Aug 14 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
用Apache反向代理设置对外的WWW和文件服务器
2006/10/09 PHP
超级简单的发送邮件程序
2006/10/09 PHP
DISCUZ 分页代码
2007/01/02 PHP
php+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
2007/03/07 PHP
去除php注释和去除空格函数分享
2014/03/13 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
2015/12/09 PHP
php中yii框架实例用法
2020/12/22 PHP
JavaScript 动态生成方法的例子
2009/07/22 Javascript
JavaScript 乱码问题
2009/08/06 Javascript
Webkit的跨域安全问题说明
2011/09/13 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
去除html代码里面的script正则方法
2016/05/19 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
2016/12/07 Javascript
vue中appear的用法
2017/08/17 Javascript
React-Native左右联动List的示例代码
2017/09/21 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
vue监听input标签的value值方法
2018/08/27 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
利用Python2下载单张图片与爬取网页图片实例代码
2017/12/25 Python
Python中的list与tuple集合区别解析
2019/10/12 Python
Python qrcode 生成一个二维码的实例详解
2020/02/12 Python
TFRecord文件查看包含的所有Features代码
2020/02/17 Python
Python操作Jira库常用方法解析
2020/04/10 Python
解决Python Matplotlib绘图数据点位置错乱问题
2020/05/16 Python
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
3个CCIE对一个工程师的面试题
2012/05/06 面试题
贸易跟单员英文求职信
2014/04/19 职场文书
毕业设计说明书
2014/05/07 职场文书
代领毕业证委托书
2014/08/02 职场文书
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
党员反腐倡廉学习心得体会
2015/08/15 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL