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编写简单的定时器的方法
May 02 Python
浅谈终端直接执行py文件,不需要python命令
Jan 23 Python
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
Mar 19 Python
Python 调用PIL库失败的解决方法
Jan 08 Python
树莓派使用USB摄像头和motion实现监控
Jun 22 Python
flask框架jinja2模板与模板继承实例分析
Aug 01 Python
详解Python 中sys.stdin.readline()的用法
Sep 12 Python
python实现电子词典
Mar 03 Python
Python调用接口合并Excel表代码实例
Mar 31 Python
如何在Windows中安装多个python解释器
Jun 16 Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 Python
python3列表删除大量重复元素remove()方法的问题详解
Jan 04 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 验证图片生成函数
2009/05/21 PHP
PHP中几种常见的超时处理全面总结
2012/09/11 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
2017/03/14 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
2019/04/10 PHP
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
AngularJS进行性能调优的7个建议
2015/12/28 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
限制复选框最多选择项的实现代码
2016/05/30 Javascript
详解Nodejs之npm&amp;package.json
2017/06/15 NodeJs
关于页面刷新vuex数据消失问题解决方案
2017/07/03 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
angularjs $http调用接口的方式详解
2018/08/13 Javascript
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
[01:10:58]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
python实现名片管理系统项目
2019/04/26 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
2019/10/25 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
使用canvas对多图片拼合并导出图片的方法
2018/08/28 HTML / CSS
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
Shopee越南:东南亚与台湾电商平台
2019/02/03 全球购物
豪华床上用品、床单和浴室必需品:Peacock Alley
2019/09/04 全球购物
do you have any Best Practice for testing
2016/06/04 面试题
学年末自我鉴定
2014/01/21 职场文书
2014年圣诞节促销方案
2014/03/14 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
交通事故代理词范文
2015/05/23 职场文书
奠基仪式致辞
2015/07/30 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers