reference
总结
这里只谈论ndarray的数据类型的计算,如果是matrix的数据类型,那么mat自带一些运算
dot(a,b)
进行矩阵乘法
没想到吧,这个看起来这么像内积,实际上是矩阵乘法,而multiply那么像矩阵乘法,实际上是逐元素相乘
- a或b是 0-D (标量), 等价于 multiply,推荐使用 numpy.multiply(a, b)或 a * b
- 如果 a和 b是 2-D arrays, 作用是矩阵的乘积, a和 b的维数要满足矩阵乘积维数要求,此时推荐使用 matmul或 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.]])
可以看到,其他的情况下,都有更推荐的API,但是在最后这种情况下,用dot( )是最为合适的
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之后两者有相同的维数
"""
所以第二个参数如果维度不够,会自动进行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.]])
*运算
- 对于ndarray, * 作用的是进行element-wise乘积,必要时需要broadcast,作用同np.multipy
- 对于matrix另有他用,这里我们先不讨论