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查询Mysql时返回字典结构的代码
Jun 18 Python
浅谈python socket函数中,send与sendall的区别与使用方法
May 09 Python
解决python文件字符串转列表时遇到空行的问题
Jul 09 Python
git进行版本控制心得详谈
Dec 10 Python
一份python入门应该看的学习资料
Apr 11 Python
Python爬虫设置代理IP(图文)
Dec 23 Python
Python TCP通信客户端服务端代码实例
Nov 21 Python
Python + Requests + Unittest接口自动化测试实例分析
Dec 12 Python
tensorflow之并行读入数据详解
Feb 05 Python
keras topN显示,自编写代码案例
Jul 03 Python
Python基于字典实现switch case函数调用
Jul 22 Python
Python+Opencv身份证号码区域提取及识别实现
Aug 25 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
PHP 实用代码收集
2010/01/22 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
2014/06/23 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
2015/03/16 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
兼容ie和firefox js关闭代码
2008/12/11 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
Javascript全局变量var与不var的区别深入解析
2013/12/09 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
js格式化输入框内金额、银行卡号
2016/02/01 Javascript
Node.js connect ECONNREFUSED错误解决办法
2016/09/15 Javascript
详解JavaScript权威指南之对象
2016/09/27 Javascript
深究AngularJS如何获取input的焦点(自定义指令)
2017/06/12 Javascript
快速搭建React的环境步骤详解
2017/11/06 Javascript
手写简单的jQuery雪花飘落效果实例
2018/04/22 jQuery
Vue实现简单分页器
2018/12/29 Javascript
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
vue+elementUI实现图片上传功能
2019/08/20 Javascript
vant实现购物车功能
2020/06/29 Javascript
python智联招聘爬虫并导入到excel代码实例
2019/09/09 Python
python的reverse函数翻转结果为None的问题
2020/05/11 Python
ktv收银员岗位职责
2013/12/16 职场文书
《草原的早晨》教学反思
2014/04/08 职场文书
县级文明单位申报材料
2014/05/23 职场文书
小学教师培训方案
2014/06/09 职场文书
参赛口号
2014/06/16 职场文书
带香烟到学校抽的检讨书
2014/09/25 职场文书
2014年学校团委工作总结
2014/12/20 职场文书
长城导游词400字
2015/01/30 职场文书
兵马俑的导游词
2015/02/02 职场文书
材料采购员岗位职责
2015/04/03 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
2019年家电促销广告语集锦
2019/10/21 职场文书
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL