XB 必须是 cdist 中的二维数组

1 投票
2 回答
4067 浏览
提问于 2025-04-18 03:31

我有两个三维数组,分别是:

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])

撰写回答