numpy中的乘法函数 np.dot, np.matmul, np.multiply


推荐掌握np.dot和np.multiply

np.dot

numpy.dot(a, b, out=None)

官方文档

情况1:

If both a and b are 1-D arrays, it is inner product of vectors (without complex conjugation).

示例:

np.dot([2j, 3j], [2j, 3j])

结果

(-13+0j)

情况2:

If both a and b are 2-D arrays, it is matrix multiplication.

示例:

c=np.array([[1,2,3],[4,5,6]])
d=np.array([[1,2,3],[4,5,6]])
print(np.dot(c,d.T))

结果

[[14 32]
 [32 77]]

情况3:

计算1维数组或2维数组与标量相乘
示例:

mat= np.array([[2, 0], [0, 2]])
np.dot(mat,3) #相当于 print(3*mat)

结果

array([[6, 0],
       [0, 6]])

情况4:

If a is an N-D array and b is a 1-D array, it is a sum product over the last axis of a and b.
即:
a.shape= ( s 0 , . . . , s n ) (s_{0},...,s_{n}) (s0,...,sn)
b.shape= ( s n , ) (s_{n},) (sn,)
result= np.dot(a,b)
则 result.shape=( s 0 s_{0} s0,…, s n − 1 s_{n-1} sn1)
其中 result [ i 0 , . . . , i n − 1 ] [i_{0},...,i_{n-1}] [i0,...,in1]为 a [ i 0 , . . . , i n − 1 , : ] [i_{0},...,i_{n-1,:}] [i0,...,in1,:]b 作元素相乘的结果,即把a沿着 axis 0 到 n − 1 n-1 n1进行切片,切成 s 0 × ⋯ × s n s_{0}\times\dots\times s_{n} s0××sn个和b的shape相同的数组,然后再分别和 b 作内积

示例:

import numpy as np
mat= np.array([[[2, 0], [0, 3]]])
print('mat.shape=',mat.shape)
v=np.array([1,2])
print('v.shape=',v.shape)
print(np.dot(mat,v))#相当于 mat[0]和v.T矩阵相乘

结果

mat.shape= (1, 2, 2)
v.shape= (2,)
[[2 6]]

numpy.matmul

linalg.multi_dot(arrays, *, out=None)

官方文档
计算2维数组的矩阵乘法,可计算多个2维数组的矩阵乘法
示例:

a = np.array([[2, 0],[0, 2]])
b = np.array([[4, 1],[2, 2]])
print(np.matmul(a,b))

结果

[[8 2]
 [4 4]]

可参考博文 numpy使用之np.matmul

numpy.linalg.multi_dot

linalg.multi_dot(arrays, *, out=None)

官方文档
计算2维数组的矩阵乘法,可计算多个2维数组的矩阵乘法

import numpy as np
a=np.array([[1,0],[0,1]])
b=np.array([[2,0],[0,2]])
c=np.array([[3,0],[0,3]])
print(np.linalg.multi_dot([a,b,c]))

结果:

[[6 0]
 [0 6]]

np.multiply

numpy.multiply(x1, x2, out=None, *, where=True)

官方文档
相当于MATLAB中的矩阵点乘,即 element-wise product
示例:

import numpy as np
mat1= np.array([[[2, 1], [0, 3]]])
mat2= np.array([[1,2],[3,4]])

结果

array([[[ 2,  2],
        [ 0, 12]]])

最新修订于2021年12月3日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值