2016-02-15 117 views
2

用numpy和theano計算餘弦相似度的最簡單方法是什麼? 作爲numpy數組給出的向量。Theano中的餘弦相似度

我試着用numpy計算餘弦相似度矩陣,它的工作起來很慢。然而,我對theano絕對陌生,但假設這個庫可以幫助我構建餘弦相似矩陣。

好吧,幫忙! :)

+1

看看[此](http://stackoverflow.com/questions/32688866/find-minimum-cosine-distance-between-two-matrices)有幫助。 – Divakar

回答

4

這是一篇關於Python中餘弦相似性的文章:Cosine Similarity between 2 Number Lists

我在numpy的和改寫Theano this answer

def cos_sim_numpy(v1, v2): 
    numerator = sum(v1*v2) 
    denominator = math.sqrt(sum(v1**2)*sum(v2**2)) 
    return numerator/denominator 

def compile_cos_sim_theano(): 
    v1 = theano.tensor.vector(dtype=theano.config.floatX) 
    v2 = theano.tensor.vector(dtype=theano.config.floatX) 
    numerator = theano.tensor.sum(v1*v2) 
    denominator = theano.tensor.sqrt(theano.tensor.sum(v1**2)*theano.tensor.sum(v2**2)) 
    return theano.function([v1, v2], numerator/denominator) 

cos_sim_theano_fn = compile_cos_sim_theano() 

v1 = numpy.asarray([3,45,7,2], dtype=np.float32) 
v2 = numpy.asarray([2,54,13,15], dtype=np.float32) 

print cos_sim_theano_fn(v1, v2), cos_sim_numpy(v1, v2) 

Output: 0.972284251712 0.972284251712