如何使用Python从最接近所有其他向量的向量列表中找到一个向量?

2024-04-20 10:50:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个向量列表作为numpy数组。在

[[ 1., 0., 0.],
 [ 0., 1., 2.] ...]

它们都有相同的维度。如何找出在向量空间中哪个向量最接近数组中的所有其他向量?有没有scipy或sklearn函数可以计算这个值?在

Update

“最近”是指余弦和欧几里得距离。在

Update 2

假设我有4个向量(a,b,c,d),向量之间的余弦距离为:

a,b=0.2

a,c=0.9

a,d=0.7

b,c=0.5

b,d=0.75

c,d=0.8

对于每个向量a,b,c,d我得到:

^{pr2}$

有没有一种方法可以说向量d是与a,b,c最相似的那个?在


Tags: 方法函数numpy距离列表空间updatescipy
1条回答
网友
1楼 · 发布于 2024-04-20 10:50:56

你可以像这样粗暴地强迫它。请注意,这是O(n^2),对于大n,它会变慢

import numpy as np

def cost_function(v1, v2):
    """Returns the square of the distance between vectors v1 and v2."""
    diff = np.subtract(v1, v2)
    # You may want to take the square root here
    return np.dot(diff, diff)

n_vectors = 5
vectors = np.random.rand(n_vectors,3)

min_i = -1
min_cost = 0
for i in range (0, n_vectors):
    sum_cost = 0.0
    for j in range(0, n_vectors):
        sum_cost = sum_cost + cost_function(vectors[i,:],vectors[j,:])
    if min_i < 0 or min_cost > sum_cost:
        min_i = i
        min_cost = sum_cost
    print('{} at {}: {:.3f}'.format(i, vectors[i,:], sum_cost))
print('Lowest cost point is {} at {}: {:.3f}'.format(min_i, vectors[min_i,:], min_cost))

相关问题 更多 >