【发布时间】:2017-06-13 18:54:16
【问题描述】:
假设我有一个如下所示的 numpy 矩阵:
array([array([ 0.0072427 , 0.00669255, 0.00785213, 0.00845336, 0.01042869]),
array([ 0.00710799, 0.00668831, 0.00772334, 0.00777796, 0.01049965]),
array([ 0.00741872, 0.00650899, 0.00772273, 0.00729002, 0.00919407]),
array([ 0.00717589, 0.00627021, 0.0069514 , 0.0079332 , 0.01069545]),
array([ 0.00617369, 0.00590539, 0.00738468, 0.00761699, 0.00886915])], dtype=object)
如何生成一个 5 x 5 矩阵,其中矩阵的每个索引都是原始矩阵中两个对应行的余弦相似度?
例如第 0 行第 2 列的值将是原始矩阵中第 1 行和第 3 行之间的余弦相似度。
这是我尝试过的:
from sklearn.metrics import pairwise_distances
from scipy.spatial.distance import cosine
import numpy as np
#features is a column in my artist_meta data frame
#where each value is a numpy array of 5 floating point values, similar to the
#form of the matrix referenced above but larger in volume
items_mat = np.array(artist_meta['features'].values)
dist_out = 1-pairwise_distances(items_mat, metric="cosine")
上面的代码给了我以下错误:
ValueError: 使用序列设置数组元素。
不知道为什么我会得到这个,因为每个数组的长度相同 (5),我已经验证了这一点。
【问题讨论】:
-
你尝试了什么?向我们展示您的代码。
-
1-pairwise_distances(f,metric="cosine")正在做您需要的事情,假设f是您帖子顶部的原始数组。items_mat的内容可能有问题。你能展示它的第一个,比如说,5x5 的元素吗? -
当然 - 原始帖子中的矩阵已更新,以反映我正在计算的前五行。即使在计算前五行的余弦相似度时,我也遇到了错误。
-
所以,正如我之前所说,假设
f是您的矩阵,1-pairwise_distances(f,metric="cosine")不会出现任何错误。 -
确保数组 dtype 是
float而不是object
标签: python numpy matrix cosine-similarity