在Javascript字典中找到最接近的向量

时间:2020-07-20 15:40:49

标签: javascript arrays

我有一个字典,其中一个单词是大小为100的向量的键; 和一个向量(大小也为100)。 如何获得最接近于myVector的字典键(在欧几里得距离的意义上)?

我已经开始手工实现一个实现,以计算myVector和myDict的每个向量之间的欧几里得距离,并保持最小值,但是我担心这样的效率极低(myDict非常大),我认为可能此类功能的内置实现。

var myDict = {
    "a":[-0.03,-0.24,0.72,...0.39,0.08,0.04],
    "b":[-0.10,0.11,0.59,...-0.54,0.67,0.10],
    "c":[-0.67,0.53,0.12,...0.61,-0.96,0.63],
    "d":[-0.76,0.05,0.81,...-0.36,0.39,0.66]
}
myVector = [0.10,-0.20,0.80,...0.60,-0.40]

(我不希望使用外部库)

1 个答案:

答案 0 :(得分:0)

您可以使用Math.hypot来获得距离,并获得距离最小的那个。

var dict = { a: [-0.03, -0.24, 0.72, 0.39, 0.08, 0.04], b: [-0.10, 0.11, 0.59, -0.54, 0.67, 0.10], c: [-0.67, 0.53, 0.12, 0.61, -0.96, 0.63], d: [-0.76, 0.05, 0.81, -0.36, 0.39, 0.66] },
    vector = [0.10, -0.20, 0.80, 0.60, -0.40],
    hypot = Math.hypot(...vector),
    closest = Object.keys(dict).reduce((a, b) =>
        Math.abs(hypot - Math.hypot(...dict[a])) < Math.abs(hypot - Math.hypot(...dict[b])) ? a : b);

console.log(closest);