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中无限元素列表的实现方法
Aug 18 Python
约瑟夫问题的Python和C++求解方法
Aug 20 Python
python自动重试第三方包retrying模块的方法
Apr 24 Python
Python中GeoJson和bokeh-1的使用讲解
Jan 03 Python
Python datetime包函数简单介绍
Aug 28 Python
基于FME使用Python过程图解
May 13 Python
Django DRF路由与扩展功能的实现
Jun 03 Python
python中pyplot基础图标函数整理
Nov 10 Python
python list等分并从等分的子集中随机选取一个数
Nov 16 Python
Pytorch实现图像识别之数字识别(附详细注释)
May 11 Python
Python连续赋值需要注意的一些问题
Jun 03 Python
Python使用PyYAML库读写yaml文件的方法
Apr 06 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基础知识:控制结构
2006/12/13 PHP
php与php MySQL 之间的关系
2009/07/17 PHP
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
PHP中串行化用法示例
2016/11/16 PHP
浅谈php调用python文件
2019/03/29 PHP
js substr、substring和slice使用说明小记
2011/09/15 Javascript
jQuery中多个元素的Hover事件解决方案
2014/06/12 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
深入理解node.js之path模块
2017/05/03 Javascript
Vue 中对图片地址进行拼接的方法
2018/09/03 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
Vuex的actions属性的具体使用
2019/04/14 Javascript
详解JavaScript的数据类型以及数据类型的转换
2019/04/20 Javascript
使用vue实现多规格选择实例(SKU)
2019/08/23 Javascript
vue+element tabs选项卡分页效果
2020/06/29 Javascript
微信小程序实现按字母排列选择城市功能
2019/11/25 Javascript
Python and、or以及and-or语法总结
2015/04/14 Python
Python3使用正则表达式爬取内涵段子示例
2018/04/22 Python
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
python修改文件内容的3种方法详解
2019/11/15 Python
Python如何在DataFrame增加数值
2020/02/14 Python
解决阿里云邮件发送不能使用25端口问题
2020/08/07 Python
python时间time模块处理大全
2020/10/25 Python
python实现不同数据库间数据同步功能
2021/02/25 Python
双立人加拿大官网:Zwilling加拿大
2020/08/10 全球购物
介绍一下Linux中的链接
2016/05/28 面试题
中学生英语演讲稿
2014/04/26 职场文书
学习党代会心得体会
2014/09/05 职场文书
公司员工离职感言
2015/08/03 职场文书
springboot 自定义配置 解决Boolean属性不生效
2022/03/18 Java/Android
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript