Numpy 用T点规则对两个矩阵进行运算

Numpy 用T点规则对两个矩阵进行运算,numpy,theano,Numpy,Theano,我想按规则将两个矩阵运算为T.dot,如下所示: op( [v1, v2, v3] , [u1, u2, u3].T ) (v & u are all vectors) 并返回矩阵: [[op(v1, u1), op(v1, u2), op(v1, u3)], [op(v2, u1), op(v2, u2), op(v2, u3)], [op(v3, u1), op(v3, u2), op(v3, u3)]] 但是,我希望op是计算余弦相似性的函数,而不是两个向量之间的点 在t

我想按规则将两个矩阵运算为T.dot,如下所示:

op( [v1, v2, v3] ,  [u1, u2, u3].T )
(v & u are all vectors)
并返回矩阵:

[[op(v1, u1), op(v1, u2), op(v1, u3)],
 [op(v2, u1), op(v2, u2), op(v2, u3)],
 [op(v3, u1), op(v3, u2), op(v3, u3)]]
但是,我希望op是计算余弦相似性的函数,而不是两个向量之间的点

在theano中是否有任何函数可以执行此操作

=======

余弦相似性函数为:

import theano.tensor as T
x = T.vector()
y = T.vector()
result, _ = T.dot(x, y) / (x.norm(2) * y.norm(2))
cosine_similarity = theano.function(inputs=[x,y], outputs=[result])

您可能应该直接对矩阵执行此操作:

定义

V = (v1, v2, v3)
U = (u1, u2, u3)
然后


您如何定义余弦相似性?是否为此添加函数定义?@Divakar添加了该定义。该定义已交叉发布到theano邮件列表中。
import theano.tensor as T
import numpy as np

U = T.fmatrix()
V = T.fmatrix()

cos_sim = T.dot(U, V.T) / (T.sqrt((U ** 2).sum(0)) * T.sqrt((V ** 2).sum(0).reshape((-1, 1))))

u = np.arange(9.).reshape(3, 3)

cos_sim.eval({U: u.astype('float32'), V: u.astype('float32')})