码迷,mamicode.com
首页 > 其他好文 > 详细

论文中矩阵的各种trick

时间:2020-05-02 10:09:14      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:div   outer   矩阵   contain   origin   shape   nal   LLC   pytho   

\(XQc\to XCq\)

其中\(X\in R^{n,p},\,Q\in R^{p,k},\, c\in R^{k,1},\, C\in R^{p, kp},\, q\in R^{kp, 1}\)\(n\)表示样本数,\(p\)表示特征维度,\(c\)表示pattern的个数。

推导过程如下:

\[\begin{align*}(XQc)_{r, 1}&=\sum_l(XQ)_{r,l}\,c_{l,1}\\&=\sum_l \sum_m X_{r,m}Q_{m,l}\,c_{l,1}\\&=\sum_m\sum_l X_{r, m} \,c_{l,1}Q_{m,l}\end{align*} \]

\(m\)先固定,如\(m=1\)\(l=\{1, \cdots ,k\}\)上式为

\[X_{r,1}c_{(1,\cdots,k),1}Q_{1, (1,\cdots,k)} \]

可以看到\(c\)\(Q\)每一行都做了矩阵乘法,而\(m\)是变动的,不难可以想象出\(I\otimes c.T\)\(Q\)要拉成已为向量。代码如下:

import numpy as np

np.random.seed(10)

X = np.random.randn(5, 10)
Q = np.random.randn(10, 3)
c = np.random.randn(3, 1)

# original 
result = X.dot(Q.dot(c))

# transformed
I = np.eye(10)
q = Q.reshape(-1, 1)

# 
C = np.outer(I, c.T).reshape(10, -1)
# C = np.multiply.outer(I, c.T).reshape(10, -1)
# C = np.einsum(‘ab, cd->abcd‘, I, c.T).reshape(10, -1)

new_result = X.dot(C.dot(q))

print("变换是否等价", np.allclose(result, new_result, rtol=1e-4))

论文中矩阵的各种trick

标签:div   outer   矩阵   contain   origin   shape   nal   LLC   pytho   

原文地址:https://www.cnblogs.com/DemonHunter/p/12815618.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!