向量运算转矩阵运算

比如
A向量: [ A 1 , A 2 ] [A_1, A_2] [A1,A2]
B向量: [ B 1 , B 2 , B 3 ] [B_1,B_2,B_3] [B1,B2,B3]
要得到A向量中的每一个元素与B向量中的每一个元素相减的结果,如何计算?
A.shape = [2]
B.shape = [3]
用代码的话就是

#(1)A扩张到[2,3]
#(2)B扩张到[2,3]
#(3)A-B
A[:,None].expand[2,3]
B[None].expand[2,3]
A-B

现在来分析一下为什么要这么做?
(1)直接推一下想要的结果
( A 1 − B 1 A 1 − B 2 A 1 − B 3 A 2 − B 1 A 2 − B 2 A 2 − B 3 ) \begin{pmatrix} A_1-B_1 & A_1-B_2 &A_1-B_3 \\ A_2-B_1& A_2-B_2& A_2-B_3 \end{pmatrix} (A1B1A2B1A1B2A2B2A1B3A2B3)
明显可以拆成2个矩阵
A = ( A 1 A 1 A 1 A 2 A 2 A 2 ) A=\begin{pmatrix} A_1& A_1&A_1 \\ A_2& A_2& A_2 \end{pmatrix} A=(A1A2A1A2A1A2)
B = ( B 1 B 2 B 3 B 1 B 2 B 3 ) B=\begin{pmatrix} B_1 & B_2 &B_3 \\ B_1& B_2& B_3 \end{pmatrix} B=(B1B1B2B2B3B3)
A − B 即 得 到 最 终 的 结 果 A-B即得到最终的结果 AB
(2)看一下这两个矩阵是怎么得到的?
A:A向量作为列向量扩展3次
B:B向量作为行向量扩展2次
(3)代码实现
A向量作为列向量,即[2]变为[2,1]
A[:,None]
B向量作为行向量,即[3]变为[1,3]
B[None,:]或者省略后面的:直接写成B[None]
A的列向量扩展到[2,3]
A[:,None].expand(2,3)
B的行向量扩展到[2,3]
B[None].expand(2,3)
相减即可

总结

要计算得到两个向量的每个元素分别加/减/乘/除后的矩阵
(1)一个向量作为列向量,另一个向量作为行向量
哪个向量作为列向量,看最后的结果希望第一个轴的值是多少,谁作为列向量谁决定第一个轴
(2)列向量扩展到最终矩阵的大小
(3)行向量扩展到最终矩阵的大小
(4)矩阵相加/减/乘/除,注意这里乘除是element-wise的乘/除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值