# numpy * dot multiply

631人阅读 评论(0)

• *
需要记住的是： numpy arrays consistently abide by the rule that operations are applied element-wise. Thus, if a and b are numpy arrays, then a*b is the array formed by multiplying the components element-wise。
即，对于ndarray, * 表示的是multiplying the components element-wise 必要时需要广播，举例：
>>> import numpy as np
>>> 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]])
#按照广播规则进行广播，再进行multiplying the components element-wise

>>> A=np.matrix(a)
>>> B=np.matrix(b)
>>> A
matrix([[0, 1, 2],
[3, 4, 5]])
>>> B
matrix([[1, 0, 1]])
>>> C=A*B
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/numpy/matrixlib/defmatrix.py", line 341, in __mul__
return N.dot(self, asmatrix(other))
ValueError: objects are not aligned
# 必须遵守矩阵相乘的法则
>>> C=A*B.T
>>> C
matrix([[2],
[8]])


• np.dot
官方文档：Dot product of two arrays.
For 2-D arrays it is equivalent to matrix multiplication, and for 1-D arrays to inner product of vectors (without complex conjugation). For N dimensions it is a sum product over the last axis of a and the second-to-last of b

>>> np.dot(a,b)
array([2, 8]) # a 2-D数组， b 1-D数组，不论b是否转置，得到的都得到相同的1-D数组
>>> np.dot(a,b.T)
array([2, 8])

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: objects are not aligned
>>> np.dot(A,B.T)
matrix([[2],
[8]])
# 必须遵守矩阵相乘的法则， 相乘的结果也保证了格式还是矩阵

1. 总之， Matrix是Array的一个小的分支，包含于Array。
2. 所以matrix 拥有array的所有特性。对于2-D数组，dot等价与矩阵相乘
3. 对于matrix，* 和 dot都表示矩阵相乘，必须遵守矩阵相乘法则

• multiply
multiply是numpy的ufunc函数，执行方法是对应元素相乘，而不是线性代数中的矩阵运算方式，类似于matlab中的点乘，当矩阵的维度不相同时，会根据一定的广播规则将维数扩充到一致的形式. 如果不能广播相同的size，multiply就会失败，举例：
>>> np.multiply(a,b)
array([[0, 0, 2],
[3, 0, 5]])
>>> np.multiply(a,b.T)
array([[0, 0, 2],
[3, 0, 5]])
>>> np.multiply(A,B)
matrix([[0, 0, 2],
[3, 0, 5]])
>>> np.multiply(A,B.T)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: operands could not be broadcast together with shapes (2,3) (3,1) 
0
0

【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐（算法+实战）--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：123913次
• 积分：2815
• 等级：
• 排名：第12695名
• 原创：150篇
• 转载：61篇
• 译文：0篇
• 评论：18条
阅读排行
最新评论