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 18 Python
Windows下安装python2.7及科学计算套装
Mar 05 Python
初步探究Python程序的执行原理
Apr 11 Python
python脚本内运行linux命令的方法
Jul 02 Python
Python中表示字符串的三种方法
Sep 06 Python
Python命令行解析模块详解
Feb 01 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
Mar 15 Python
python 执行shell命令并将结果保存的实例
May 11 Python
python实现两个文件夹的同步
Aug 29 Python
python 实现矩阵填充0的例子
Nov 29 Python
python网络编程:socketserver的基本使用方法实例分析
Apr 09 Python
Django nginx配置实现过程详解
Sep 10 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 $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
使用php实现网站验证码功能【推荐】
2017/02/09 PHP
thinkPHP5.0框架自动加载机制分析
2017/03/18 PHP
告诉大家什么是JSON
2008/06/10 Javascript
javascript 写类方式之三
2009/07/05 Javascript
JavaScript 格式字符串的应用
2010/03/29 Javascript
数组方法解决JS字符串连接性能问题有争议
2011/01/12 Javascript
jquery使用经验小结
2015/05/20 Javascript
jQuery实现返回顶部效果的方法
2015/05/29 Javascript
JS弹出窗口插件zDialog简单用法示例
2016/06/12 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
解决Vue 通过下表修改数组,页面不渲染的问题
2018/03/08 Javascript
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
基于 vue-skeleton-webpack-plugin 的骨架屏实战
2019/08/05 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
windows 10 设定计划任务自动执行 python 脚本的方法
2019/09/11 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
基于opencv实现简单画板功能
2020/08/02 Python
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
Waterford加拿大官方网站:世界著名的水晶杯品牌
2016/11/01 全球购物
俄罗斯园林植物网上商店:Garshinka
2020/07/16 全球购物
造价工程师个人求职信
2013/09/21 职场文书
员工安全承诺书
2014/05/22 职场文书
银行求职信范文
2014/05/26 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
庆六一宣传标语
2014/10/08 职场文书
四风查摆问题自查报告
2014/10/10 职场文书
催款律师函范文
2015/05/27 职场文书