# numpy * dot multiply

• *
需要记住的是： 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) 

• 本文已收录于以下专栏：

## numpy中关于*和dot的区别

numpy数组计算中*和dot是有很大区别的 1.
• liugan5371375
• 2014年09月11日 22:27
• 26318

## numpy中的 dot, outer and *

• zjm750617105
• 2016年11月25日 22:17
• 6073

## Python numpy函数：dot（）

dot()函数是矩阵乘，而*则表示逐个元素相乘 一、dot（）：
• qq_28618765
• 2017年09月25日 11:14
• 1117

## numpy中的dot()函数

• qq_25436597
• 2017年12月19日 09:22
• 98

## numpy中关于*和dot的区别

numpy数组计算中*和dot是有很大区别的 1.numpy乘法运算中"*"是数组元素逐个计算具体代码如下： 2.numpy乘法运算中dot是按照矩阵乘法的规则来运算的具体...
• IAlexanderI
• 2017年06月30日 10:44
• 571

## numpy.dot()函数用法

• u012149181
• 2017年12月27日 16:11
• 135

## numpy中multiply函数怎么用

multiply(a,b)就是个乘法，如果a,b是两个数组，那么对应元素相乘 numpy.multiplynumpy.multiply(x1, x2[, out]) = Multiply arg...
• qq_18433441
• 2017年02月05日 00:01
• 9161

## numpy multiply

numpy.multiply(x1, x2[, out]) : Multiply arguments element-wise, 广播法则。 numpy的multiply和*什么区别 　　Nump...
• iamzhangzhuping
• 2016年08月29日 22:25
• 854

## Numpy基础笔记

Numpy（Numerical Python的简称）是高性能科学计算和数据分析的基础包。其部分功能如下： ndarray，一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。 用于对整组数据...
• hickai
• 2014年04月11日 11:17
• 52209

## 关于 numpy 中 multiply的用法

>>> import numpy as np >>> li = [1,2,3,4,5] >>> m1 = np.mat(li ) >>> m1 matrix([[1, 2, 3, 4, 5]]) >>...
• u012300569
• 2014年08月10日 21:21
• 1380

举报原因： 您举报文章：numpy * dot multiply 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)