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下载文件时显示下载进度的方法
Apr 02 Python
python中的闭包用法实例详解
May 05 Python
Python二叉搜索树与双向链表转换实现方法
Apr 29 Python
Python内置函数reversed()用法分析
Mar 20 Python
selenium + python 获取table数据的示例讲解
Oct 13 Python
解决Python获取字典dict中不存在的值时出错问题
Oct 17 Python
python ipset管理 增删白名单的方法
Jan 14 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 Python
pytorch实现查看当前学习率
Jun 24 Python
关于Kotlin中SAM转换的那些事
Sep 15 Python
python爬虫构建代理ip池抓取数据库的示例代码
Sep 22 Python
python爬虫请求头的使用
Dec 01 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通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
PHP注释语法规范与命名规范详解篇
2018/01/21 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
script标签的 charset 属性使用说明
2010/12/04 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
JavaScript替换当前页面的方法
2015/04/03 Javascript
jquery实现很酷的网页顶部图标下拉菜单效果
2015/08/22 Javascript
基于jQuery实现一个marquee无缝滚动的插件
2017/03/09 Javascript
js正则相关知识点专题
2018/05/10 Javascript
解决Vue+Element ui开发中碰到的IE问题
2018/09/03 Javascript
微信小程序开发实现消息推送
2020/11/18 Javascript
vue-cli3项目展示本地Markdown文件的方法
2019/06/07 Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
2019/06/12 Javascript
Vue 实例事件简单示例
2019/09/19 Javascript
详解Vue之计算属性
2020/06/20 Javascript
Vue使用路由钩子拦截器beforeEach和afterEach监听路由
2020/11/16 Javascript
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
python 简单备份文件脚本v1.0的实例
2017/11/06 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
2019/08/08 Python
Python判断字符串是否xx开始或结尾的示例
2019/08/08 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
Python线程threading模块用法详解
2020/02/26 Python
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
生日邀请函范文
2014/01/13 职场文书
后勤主管岗位职责
2014/03/01 职场文书
班子查摆四风个人对照检查材料思想汇报
2014/10/04 职场文书
用人单位的规章制度,怎样制定才是有效的?
2019/07/09 职场文书
如何在Mac上通过docker配置PHP开发环境
2021/05/29 PHP
关于python类SortedList详解
2021/09/04 Python
常用的文件对应的MIME类型汇总
2022/04/26 HTML / CSS