XB 必须是 cdist 中的二维数组
我有两个三维数组,分别是:
clusters = [array([[ 0.42199652, -0.14364404, 0.21290469]]),
array([[ 5.80084178e-05, 1.20779787e-02, -2.65970238e-02],
[ -1.36810406e-02, 6.85722519e-02, -2.60280724e-01],
[ 3.03098198e-02, 1.50170659e-02, -1.09683402e-01],
[ -1.50776089e-03, 7.22369575e-03, -3.71181228e-02],
[ -3.04448275e-01, -3.66987035e-01, 1.44618682e-01],
[ 1.16567762e-03, 1.72858807e-02, -9.39297514e-02],
[ 1.25896836e-04, 1.61310167e-02, -6.00253128e-02],
[ 1.65062798e-02, 1.96933143e-02, -4.26540031e-02],
[ -3.78020965e-03, 7.51770012e-03, -3.67852984e-02]]),
array([[-0.14674492, 0.34711217, 0.30955027]])
out_list = [[ 0.01650628 0.01969331 -0.042654 ]
[-0.00150776 0.0072237 -0.03711812]
[ 0.0001259 0.01613102 -0.06002531]]
我需要计算out_list
中每一行和clusters
中每个数组之间的欧几里得距离。
我有一些代码如下:
intra_dist = [scipy.spatial.distance.cdist(clusters[i],out_list[i], 'euclidean') for i in xrange(num_clusters)]
但是它给我报了一个错误:ValueError: XB must be a 2-dimensional array.
有什么解决办法吗?
2 个回答
-1
你的 out_list
是一个一维的 numpy
数组。注意到在 out_list
的值之间没有逗号,而在数据组里,值之间是有逗号的。为了让它正常工作,需要把 out_list
转换成一个二维的列表:
out_list_new = []
for element in (out_list):
out_list_new.append([element[0], element[1])
intra_dist = [scipy.spatial.distance.cdist(clusters[i],out_list[i], 'euclidean') for i in xrange(num_clusters)]
这样应该可以正常运行
0
你需要写出embedding1和embedding2,但不要包含索引位置。
根据余弦相似度,为每个查询句子找到语料库中最接近的5个句子
closest_n = 5
for query, query_embedding in zip(headlines, headline_embeddings):
distances = scipy.spatial.distance.cdist(embedding1, embedding2, "cosine")[0]
results = zip(range(len(distances)), distances)
results = sorted(results, key=lambda x: x[1])