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

*运算

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

>>> a = np.array(range(6)).reshape((2,3))
>>> b = np.array([1,0,1])
>>> a
array([[0, 1, 2],
[3, 4, 5]])
>>> b
array([1, 0, 1])
>>> c= a*b
>>> c
array([[0, 0, 2],
[3, 0, 5]])
>>> d = a*b.T
>>> d
array([[0, 0, 2],
[3, 0, 5]])

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

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

multiply运算

函数原型是

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之后两者有相同的维数

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

 

最新文章

  1. GsonFormat插件从配置到使用
  2. CSS的选择器
  3. Python2.x和3.x主要差异总结
  4. HTTP状态代码
  5. tcpdump学习
  6. FreeBSD下查看各软件版本命令
  7. snmp安装配置
  8. IIS6,IIS7中查看w3wp进程
  9. 使用EasyUI实现加入和删除功能
  10. 简单hash[或者是哈希思想]
  11. Swift 细节
  12. hdu1009 FatMouse&#39; Trade---贪心
  13. C语言程序设计第二次作业——顺序结构
  14. jmeter接口测试报java.net.SocketException: Socket closed错误。
  15. 3.ifconfig
  16. 关于 redis.properties配置文件及rule
  17. MATLAB程序控制语句
  18. HCharts随笔之简单入门
  19. (map)What Are You Talking About hdu1075
  20. linux上安装memcached步骤

热门文章

  1. Python re标准库
  2. IPsec分析/测试/
  3. R语言 循环
  4. Divide by Zero 2018 and Codeforces Round #474 (Div. 1 + Div. 2, combined)G - Bandit Blues
  5. [Codeplus 4月赛]最短路
  6. 使用JDK自带功能,实现一个简单的Web Service接口发布
  7. 使用Python实现不同目录下文件的拷贝
  8. Idea 2018.2.5创建springboot项目依赖包没有的错误
  9. JavaScript特效源码(1、文字特效)
  10. LuoguP3338 [ZJOI2014]力