关于numpy.outer/dot/multiply的原理记录

关于numpy.outer/dot/multiply的原理记录

numpy.outer

官方文档

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

计算两个向量的 外积
假设有两个两个向量 a = [ a 0 , a 1 , a 2 ] a=[a_0,a_1 ,a_2] a=[a0,a1,a2] b = [ b 0 , b 1 , b 2 ] b=[b_0,b_1, b_2] b=[b0,b1,b2] 那么他们的外积就是:
[ a 0 ∗ b 0 a 0 ∗ b 1 a 0 ∗ b 2 a 1 ∗ b 0 . . . . . . a 2 ∗ b 0 . a 2 ∗ b 2 ] \left[ \begin{matrix} a_0*b_0 & a_0*b_1 & a_0*b_2\\ a_1*b_0 & . & & \\ ... & .& . & \\ a_2*b_0 & . & a_2*b_2 \end{matrix} \right] a0b0a1b0...a2b0a0b1...a0b2.a2b2

对于两个矩阵 a = [ a 11 a 12 a 21 a 22 ] a=\begin{bmatrix} a_{11}&a_{12}\\ a_{21}&a_{22} \end{bmatrix} a=[a11a21a12a22] b = [ b 11 b 12 b 21 b 22 ] b=\begin{bmatrix} b_{11}&b_{12}\\ b_{21}&b_{22} \end{bmatrix} b=[b11b21b12b22] ,他们的外积等于
[ a 11 ∗ b 11 a 11 ∗ b 12 a 11 ∗ b 21 a 11 ∗ b 22 a 12 ∗ b 11 a 12 ∗ b 12 a 12 ∗ b 21 a 12 ∗ b 22 . . . a 22 ∗ b 11 a 22 ∗ b 12 a 22 ∗ b 21 a 22 ∗ b 22 ] \left[ \begin{matrix} a_{11}*b_{11} & a_{11}*b_{12} & a_{11}*b_{21}&a_{11}*b_{22}\\ a_{12}*b_{11} & a_{12}*b_{12} & a_{12}*b_{21}&a_{12}*b_{22}\\ ...\\ a_{22}*b_{11} & a_{22}*b_{12} & a_{22}*b_{21}&a_{22}*b_{22} \end{matrix} \right] a11b11a12b11...a22b11a11b12a12b12a22b12a11b21a12b21a22b21a11b22a12b22a22b22

参数
a:( M , M, M,)array_like
第一个输入的向量。如果是矩阵,自动展开成一维
b:( N , N, N,)array_like
第二个输入向量。如果是矩阵,自动展开成一维
out: ( M , N ) (M,N) (M,N)ndarray,optional
存储结果的地方,也就是说它就是 返回值

import numpy as np

a=[[1,2,3],[0,3,4],[3,0,5]]
a=np.array(a)
print(np.outer(a,a.T))
'''
[[ 1  0  3  2  3  0  3  4  5]
 [ 2  0  6  4  6  0  6  8 10]
 [ 3  0  9  6  9  0  9 12 15]
 [ 0  0  0  0  0  0  0  0  0]
 [ 3  0  9  6  9  0  9 12 15]
 [ 4  0 12  8 12  0 12 16 20]
 [ 3  0  9  6  9  0  9 12 15]
 [ 0  0  0  0  0  0  0  0  0]
 [ 5  0 15 10 15  0 15 20 25]]
'''

numpy.dot

官方文档

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

同样是上面两个向量和两个矩阵
a v e c t o r ⋅ b v e c t o r = a 0 ∗ b 0 + a 1 ∗ b 1 + a 2 ∗ b 2 a_{vector}\cdot b_{vector}=a_0*b_0+a_1*b_1+a_2*b_2 avectorbvector=a0b0+a1b1+a2b2

a m a t r i x ⋅ b m a t r i x = [ a 11 ∗ b 11 + a 12 ∗ b 21 a 11 ∗ b 12 + a 12 ∗ b 22 a 21 ∗ b 11 + a 22 ∗ b 21 a 21 ∗ b 12 + a 22 ∗ b 22 ] a_{matrix}\cdot b_{matrix}=\left[\begin{matrix}a_{11}*b_{11}+a_{12}*b_{21} & a_{11}*b_{12}+a_{12}*b_{22}\\ a_{21}*b_{11}+a_{22}*b_{21} & a_{21}*b_{12}+a_{22}*b_{22}\end{matrix}\right] amatrixbmatrix=[a11b11+a12b21a21b11+a22b21a11b12+a12b22a21b12+a22b22]

至于参数,和上面的意思差不多

import numpy as np

a=[[1,2,3],[0,3,4],[3,0,5]]
a=np.array(a)
print(np.dot(a.T,a))
'''
[[10  2 18]
 [ 2 13 18]
 [18 18 50]]
'''

numpy.multiply

官方文档

numpy.multiply(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) = <ufunc 'multiply'>

这个虽然参数很多,但是我们常使用不用这么多参数,只需要把两个向量(或者矩阵)输入进去就好了
至于原理,就和我们普通乘法一样,对应位置的元素相乘比如上面的两个矩阵
a m a t r i x × b m a t r i x = [ a 11 ∗ b 11 a 12 ∗ b 12 a 21 ∗ b 21 a 22 ∗ b 22 ] a_{matrix}\times b_{matrix=} \left[ \begin{matrix} a_{11}*b_{11}&a_{12}*b_{12}\\ a_{21}*b_{21}&a_{22}*b_{22} \end{matrix} \right] amatrix×bmatrix=[a11b11a21b21a12b12a22b22]

import numpy as np

a=[[1,2,3],[0,3,4],[3,0,5]]
a=np.array(a)
print(np.multiply(a.T,a))
'''
[[ 1  0  9]
 [ 0  9  0]
 [ 9  0 25]]
'''
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值