浏览更多内容,可访问:http://www.growai.cn
欢迎您关注作者知乎:ML与DL成长之路
推荐关注公众号:AI成长社,ML与DL的成长圣地。
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]]]])
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)
---------------------------------------------------------------------------
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,)
##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]])