numpy中的dot、outer、multiply和*的用法
2017-09-10 22:36
405 查看
numpy中的dot、outer、multiply和 * 的使用方法
1 np.dot()
numpy.dot(a, b, out=None):对于二维数组,它相当于矩阵的乘法;对于一维数组,则是向量的内积;而对于n维,它是a的最后一个轴向和b的倒数第二个轴向的乘积和。代码如下:
一维数组
>>> np.dot(3, 4) 12 >>> np.dot([2, 3], [4, 4]) 20
二维数组
>>> a = [[1, 0], [0, 1]] >>> b = [[4, 1], [2, 2]] >>> np.dot(a, b) array([[4, 1], [2, 2]])
n维数组
>>> a = np.arange(6).reshape(1, 2, 3) >>> b = np.arange(6).reshape(2, 3, 1) >>> a array([[[0, 1, 2], [3, 4, 5]]]) >>> b array([[[0], [1], [2]], [[3], [4], [5]]]) >>> np.dot(a, b) array([[[[ 5], [14]], [[14], [50]]]])
2 np.outer()
numpy.outer(a, b, out=None):计算两个向量的外积。已知两个输入向量为a = [a0, a1, ..., aM]和
b = [b0, b1, ..., bN],则输出为:
[[a0*b0 a0*b1 ... a0*bN ] [a1*b0 . [ ... . [aM*b0 aM*bN ]]
注:输入a,b,如果不是一维数组,则先将其变成一维数组,即可得a(M,)和b(N,)这种形式,可得输出为(M,N)。
out[i, j] = a[i] * b[j]
代码如下:
对于数字数组
>>> a = np.array([[1, 2], [1, 1]]) array([[1, 2], [1, 1]]) >>> b = np.array([[2, 3], [1, 3]]) array([[2, 3], [1, 3]]) >>> np.outer(a, b) array([[2, 3, 1, 3], [4, 6, 2, 6], [2, 3, 1, 3], [2, 3, 1, 3]])
对一个字母例子
>>> x = np.array(['a', 'b', 'c'], dtype=object) >>> np.outer(x, [1, 2, 3]) array([[a, aa, aaa], [b, bb, bbb], [c, cc, ccc]], dtype=object)
3 np.multiply()
为对应元素的乘积。代码如下:
>>> np.multiply(2.0, 4.0) 8.0 >>> x1 = np.array([[1, 2, 3], [4, 5, 6]]) >>> x2 = np.array([[7, 8, 9], [4, 7, 1]]) >>> np.multiply(x1, x2) array([[ 7, 16, 27], [16, 35, 6]])
注:维度相等时才能使用,当数组或者矩阵的维度不相同时,会根据一定的广播规则将维数扩充到一致的形式,但是如果形式不能填充侧报错,如下
可以自动填充
>>> 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.]])
对比情况
>>> x1 = np.arange(9.0).reshape((3, 3)) >>> x3 = np.arange(4.0) >>> np.multiply(x1, x3) <hr /> ValueError Traceback (most recent call last) <ipython-input-50-abc06b5da097> in <module>() ----> 1 np.multiply(x1, x3) ValueError: operands could not be broadcast together with shapes (3,3) (4 b22b ,)
4 矩阵中的*
‘*’ 也为对于元素的乘积,当是两个数组相乘时和np.multiply用法相同,但是如果相乘的元素是矩阵时,则和np.dot用处相同,表示矩阵相乘。数组相乘:
>>> x1 = np.arange(9.0).reshape((3, 3)) >>> x2 = np.arange(3.0) >>> x1 * x2 array([[ 0., 1., 4.], [ 0., 4., 10.], [ 0., 7., 16.]])
矩阵相乘
>>> x1 = np.array([[1, 2], [3, 4]]) >>> x2 = np.array([[7, 8], [4, 7]]) >>> a = np.mat(x1) >>> b = np.mat(x2) >>> a*b matrix([[15, 22], [37, 52]]) >>> np.dot(x1, x2) array([[15, 22], [37, 52]])
相关文章推荐
- Python:numpy中dot,outer,*用法
- python numpy中*,np.dot(),np.multiply()区
- numpy中矩阵相乘的用法:dot函数和乘号*
- python函数- exp、np.linalg.norm、np.multiply()、np.dot()、*、outer()、squeeze
- numpy中dot、multiply和asterisk的区别和联系。
- 【Numpy】 乘法 np.multiply np.dot
- 关于 numpy 中 multiply的用法
- numpy.dot()函数用法
- Numpy np.dot() vs np.multiply() vs *
- numpy中的 dot, outer and *
- Numpy中的几种矩阵乘法 np.dot, np.multiply, *
- numpy:dot与multiply
- numpy里*与dot与multiply
- [笔记]numpy中的tile与kron的用法
- numpy中矩阵乘法,星乘(*)和点乘(.dot)的区别
- numpy的基本用法与其中的函数
- numpy中关于*和dot的区别
- numpy.convolve 用法
- numpy的基础用法
- numpy中bincount、repeat、newaxis以及assert的用法详解