使用numpy时,跟matlab不同:

1、* dot() multiply()

对于array来说,* 和 dot()运算不同

*是每个元素对应相乘

dot()是矩阵乘法

对于matrix来说,* 和 multiply() 运算不同

* 是矩阵乘法

multiply()  是每个元素对应相乘

A B为array   MA MB为matrix

multiply(MA, MB)对应元素相乘

dot(MA, MB)矩阵乘法

注意:对应元素相乘时,矩阵大小必须相同;矩阵相乘时,矩阵大小要满足矩阵相乘要求。

 
 
 

dot运算

numpy官方文档上所写:

  • 如果 a和 b都是 1-D arrays,它的作用是计算内积。(不进行复共轭)
  1. >>> np.dot(3, 4)
  2. 12
  1. >>> np.dot([2j, 3+3j], [2j, 3j])
  2. (-13+9j)
  • 如果 a和 b是 2-D arrays, 作用是矩阵的乘积, a和 b的维数要满足矩阵乘积维数要求,此时推荐使用 matmul或 a @ b
  1. >>> a = [[1, 0], [0, 1]]
  2. >>> b = [[4, 1], [2, 2]]
  3. >>> np.dot(a, b)
  4. array([[4, 1],
  5. [2, 2]])
  • 如果 a或 b是 0-D (标量), 等价于 multiply,推荐使用 numpy.multiply(a, b)或 a * b
  • 如果 a是 N-D array 且 b是 1-D array, 作用是在a和 b的最后一个轴上进行sum product运算。
  1. >>> a = array([[[ 1., 2., 3., 4.],
  2. [ 5., 6., 7., 8.],
  3. [ 9., 10., 11., 12.]],
  4. [[ 1., 2., 3., 4.],
  5. [ 5., 6., 7., 8.],
  6. [ 9., 10., 11., 12.]]])
  7. >>> b = np.array([1,2,3,4])
  8. >>>np.dot(a, b)
  9. array([[ 30., 70., 110.],
  10. [ 30., 70., 110.]])
  • 如果a是 N-D array 且 b是 M-D array (M>=2), 作用是在a的最后一个轴上和b的倒数第二个轴上进行sum product,即 :
  1. dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])
  1. >>> a = np.arange(3*4*5*6).reshape((3,4,5,6))
  2. >>> b = np.arange(3*4*5*6)[::-1].reshape((5,4,6,3))
  3. >>> np.dot(a, b)[2,3,2,1,2,2]
  4. 499128
  5. >>> sum(a[2,3,2,:] * b[1,2,:,2])
  6. 499128

*运算

对于ndarray, * 作用的是进行element-wise乘积,必要时需要broadcast,作用同np.multipy

  1. >>> a = np.array(range(6)).reshape((2,3))
  2. >>> b = np.array([1,0,1])
  3. >>> a
  4. array([[0, 1, 2],
  5. [3, 4, 5]])
  6. >>> b
  7. array([1, 0, 1])
  8. >>> c= a*b
  9. >>> c
  10. array([[0, 0, 2],
  11. [3, 0, 5]])
  12. >>> d = a*b.T
  13. >>> d
  14. array([[0, 0, 2],
  15. [3, 0, 5]])

而对于matrix,* 则表示矩阵相乘,运算必须保证矩阵相乘的法则:

  1. >>> A=np.matrix(a)
  2. >>> B=np.matrix(b)
  3. >>> A
  4. matrix([[0, 1, 2],
  5. [3, 4, 5]])
  6. >>> B
  7. matrix([[1, 0, 1]])
  8. >>> C=A*B
  9. ValueError: shapes (2,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)
  10. #维数不匹配
  11. >>> C=A*B.T
  12. >>> C
  13. matrix([[2],
  14. [8]])

multiply运算

函数原型是

  1. numpy.multiply(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) = <ufunc 'multiply'>

Returns:
y : ndarray
x1 和 x2的element-wise乘积,保证x1和x2有相同的维数,或者进行broadcast之后两者有相同的维数

  1. >>> np.multiply(2.0, 4.0)
  2. 8.0
  3. >>> x1 = np.arange(9.0).reshape((3, 3))
  4. >>> x2 = np.arange(3.0)
  5. >>> np.multiply(x1, x2)
  6. array([[ 0., 1., 4.],
  7. [ 0., 4., 10.],
  8. [ 0., 7., 16.]])
  9. #要进行broadcast
 

 

Numpy数据的操作 * dot() multiply() 的区别的更多相关文章

  1. python numpy 数据集合操作函数

    arrarray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])arr1array([0, 1, 2, 3, 4])np.intersect1d(arr,arr1)#计算数组ARR A ...

  2. 【笔记】numpy.array的常用基本运算以及对数据的操作

    numpy.array的基本运算以及对数据的操作 设置一个问题,例如 这种只需要基本的运算就可以实现 类似的 numpy对向量的运算进行了优化,速度是相当快的,这种被称为universal funct ...

  3. 关于MySql数据库主键及索引的区别

    一.什么是索引?索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里 ...

  4. MySQL数据库(2)- 库的操作、表的操作、数据的操作、存储引擎的介绍

    一.库的操作 1.系统数据库 执行如下命令,查看系统数据库: mysql> show databases; 参数解释: information_schema: 虚拟库,不占用磁盘空间,存储的是数 ...

  5. SQL语句学习积累·数据的操作

    数据的操作 select 取表中前五条数据 select top 5 from table_name 取表中前50%的数据 select top 50 percent from table_name ...

  6. Mysql对表中 数据 的操作 DML

    上一知识点回顾: mysql的备份: 直接使用navicat进行备份 转储SQL文件:有结构和数据/ 仅结构 两种 需要还原时 单击 数据库名字  运行SQL文件  创建表ctreate 修改表alt ...

  7. Day03:文本数据IO操作 / 异常处理

    文本数据IO操作 Reader和Writer 字符流原理  Reader是字符输入流的父类  Writer是字符输出流的父类. 字符流是以字符(char)为单位读写数据的.一次处理一个unicode. ...

  8. JAVASE02-Unit08: 文本数据IO操作 、 异常处理

    Unit08: 文本数据IO操作 . 异常处理 * java.io.ObjectOutputStream * 对象输出流,作用是进行对象序列化 package day08; import java.i ...

  9. JAVASE02-Unit07: 基本IO操作 、 文本数据IO操作

    基本IO操作 . 文本数据IO操作 java标准IO(input/output)操作 package day07; import java.io.FileOutputStream; import ja ...

随机推荐

  1. day23 内置函数,匿名函数,递归

    Python之路,Day11 = Python基础11 内置函数divmod(x, y)   # (商, 模)enumerate(可迭代对象)     # (序号,值)eval(字符串) # 把字符串 ...

  2. 大数据之hadoop集群安全模式

    集群安全模式1.概述(1)NameNode启动 NameNode启动时,首先将镜像文件(Fsimage)载入内存,并执行编辑日志(Edits)中的各项操作.-旦在内存中成功建立文件系统元数据的影像,则 ...

  3. BZOJ 1084 (SCOI 2005) 最大子矩阵

    1084: [SCOI2005]最大子矩阵 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3560 Solved: 1779 [Submit][Sta ...

  4. 关于Unity3D中函数说明

    Camera.SetReplacementShader(Shader shader , String replacementTag); 说明: 根据replacementTag设置以后的相机渲染用哪个 ...

  5. JVM规范

  6. 【数位DP】[LOJ10163]Amount of Degrees

    发现自己以前对数位DP其实一窍不通... 这题可以做一个很简单的转换:一个数如果在$b$进制下是一个01串,且1的个数恰好有k个,那么这个数就是合法的(刚开始没判断必定是01串,只判断了1的个数竟然有 ...

  7. Apache服务器中运行CGI程序的方法,文中以Perl脚本作为示例

    关于apache与CGI在这里就不解释了. 1.apache下面以2.0.63为例介绍运行CGI程序的配置.(http://www.nklsyy.com) 2.下载Windows下的Perl解释器Ac ...

  8. F. Cowmpany Cowmpensation dp+拉格朗日插值

    题意:一个数,每个节点取值是1-d,父亲比儿子节点值要大,求方案数 题解:\(dp[u][x]=\prod_{v}\sum_{i=1}^xdp[v][i]\),v是u的子节点,先预处理出前3000项, ...

  9. CF1166D——数学公式思维题

    #include<bits/stdc++.h> using namespace std; #define ll long long ll ans[],a,b,m; /* b=2^(n-2) ...

  10. dijkstra (模板)

    突然意识到以前写的都是假的dij,感谢GhostCai神犇. #include<iostream> #include<cstdio> #include<cstring&g ...